Форма публикации с использованием WinHttp - PullRequest
4 голосов
/ 25 декабря 2010

Нужно ли добавлять какие-либо заголовки перед отправкой сообщения на сервер?

Например, в настоящее время я пытаюсь отправить запрос вместе с данными публикации таким образом,

  LPCWSTR post = L"name=User&subject=Hi&message=Hi";

    if (!(WinHttpSendRequest( hRequest, 
                            WINHTTP_NO_ADDITIONAL_HEADERS,
                            0, (LPVOID)post, wcslen(post), 
                            wcslen(post), 0)))
    {
          //error
    }

это должно работать?

Ответы [ 3 ]

5 голосов
/ 04 февраля 2015

Что сработало для меня:

    LPSTR  post = "log=test";//in my php file: if(isset($_POST['log']))
    hRequest = WinHttpOpenRequest(hConnect,
                                    L"POST",
                                    L"/test.php",
                                    NULL,
                                    WINHTTP_NO_REFERER,
                                    WINHTTP_DEFAULT_ACCEPT_TYPES,
                                    0);
    bResults = WinHttpSendRequest(hRequest,
                                    L"content-type:application/x-www-form-urlencoded",
                                    -1,
                                    post,
                                    strlen(post),
                                    strlen(post),
                                    NULL);
2 голосов
/ 21 января 2011

Я бы догадался

  • вам нужно передавать узкие строки, не такие широкие, как данные поста. Я не знаю, указываете ли вы тип контента для публикуемых данных, который бы указывал кодировку - вам, вероятно, следует это делать, если это легко - или просто перекодировать строку в UTF-8, или просто собрать как узкую строку на первом месте
  • вам может понадобиться явный конец строки в данных поста, т. Е. Добавить \r\n к вашей (узкой) строке - я не знаю, будет ли API добавлять ее, поскольку я предполагаю, что вы сделаете тот же вызов для двоичных данных.
1 голос
/ 21 января 2011

Согласно этой странице MSDN , похоже, что ваш пример кода будет работать, если вы используете глагол "POST" в WinHttpOpenRequest.Если что-то просто не работает, запустите Fiddler как в веб-браузере, так и в вашем приложении, и сравните заголовки, созданные в обоих случаях.

...