对友好 URL 的 POST 请求失败

Posted

技术标签:

【中文标题】对友好 URL 的 POST 请求失败【英文标题】:POST request to a friendly URL fails 【发布时间】:2012-09-02 02:34:05 【问题描述】:

我正在尝试将 HTTP 请求发布到可通过友好 URL 地址访问的 html 表单。 但是当我发布它时,库返回错误代码“提供了错误的 URL”。

HINTERNET hRequest = HttpOpenRequest(hConn, L"POST", L"newform",
                     NULL, L"http://www.example.com/add/newform/",
                     rgpszAcceptTypes, NULL, NULL);
DWORD error_code   = GetLastError();
bool hResult       = HttpSendRequestW(hRequest,NULL,NULL,NULL,NULL);
error_code         = GetLastError(); //12005 - bad URL provided  

我做错了什么,为什么我的请求失败了?

【问题讨论】:

请使用完整的英文单词。 "thru" 我之前更正了。 【参考方案1】:

必须在调用 InternetConnect 时指定服务器名称(上述示例中的 www.site.com),协议 (INTERNET_SERVICE_HTTP) 也必须指定。

在对 HttpOpenRequest 的调用中,您只需给出“对象”的名称,在本例中为“/add/newform/”。

例如(为了更清楚而添加):

HINTERNET hConn = InternetConnect(hInternet, L"www.site.com", INTERNET_DEFAULT_HTTP_PORT,
    NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
HINTERNET hRequest = HttpOpenRequest(hConn, L"POST", L"/add/newform", NULL, NULL,
    rgpszAcceptTypes, NULL, NULL);

【讨论】:

为什么不呢?您是否至少查看了我提到的功能的文档? 好吧,看起来你不太了解他们。我在答案中添加了一个示例,可能会更清楚。 谢谢。我做了完全一样的,它仍然说我得到了错误的 URL。我已经下拉我的 WinInet 代码并切换到 WinHTTP 库。我看不到 WinInet 或 WinHttp 直接发送到服务器的主要问题。我的意思是标题、数据和类似的东西。 我需要为页面创建一个完整的 POST 请求,其中包含所有表单数据(多部分)和内容 您可能希望更详细地重新表述您的问题,在这种情况下显示更多代码。

以上是关于对友好 URL 的 POST 请求失败的主要内容,如果未能解决你的问题,请参考以下文章

python http请求时使用GET返回成功,使用POST却返回失败

四post请求(json)

AFNetworking 问题:NSErrorFailingURLKey=url,NSLocalizedDescription=请求失败:错误请求 (400)

Fiddler模拟post四种请求数据

Fiddler抓包7-post请求(json)

Fiddler抓包7-post请求(json)