我与两个(不相关的)webservices有联系;使用传递JSON字符串的POST请求访问它们。
使用这个逻辑:
Create a session (InternetOpen)
Connect to server on given port (InternetConnect) (either secured or not)
Create a request on the connection, POST a script (HttpOpenRequest)
In a loop:
Look for options (InternetQueryOptions) to set flags;
Set options when instructed
until this os Ok.
Once Ok: in a loop
Send request (HtpRequest) sending the JSON string.
Get last error.
Set security if requested, handle other errors.
until send Ok of some error has occured in processing.
If sending was Ok, get the return data (InternetReadFile)
一个站点在HttpSendRequest
失败,踩着嗅探器并行运行代码,我看到了:
发布请求,返回状态200
GET(我猜状态)返回状态400:使用此错误tekst。
看起来该服务不接受该数据。
但是,GetLastError
返回0。
嗅探器在执行HttOpenRequest
调用时显示以下输出:(数据模糊,但全部有效)
POST HTTP / 1.1
内容类型:application / json
用户代理:(MyConnector)
主持人:(远程主机:端口)
内容长度:21604
附注:无缓存
{(JSON字符串)}
HTTP / 1.1 301永久移动
日期:2014年9月9日星期二15:38:31 GMT
服务器:Apache / 2.2.22(Ubuntu)
到期日:2014年9月9日星期二15:38:31 GMT
缓存控制:无缓存,无存储,必须重新验证,max-age = 0
Last-Modified:Tue,09 Sep 2014 15:38:31 GMT
地点: 变化:
接受编码
内容长度:0
内容类型:text / html;字符集= UTF-8
获取HTTP / 1.1
用户代理:MyConnector
主持人::(远程主机:端口)
Pragma:no-cache连接:Keep-Alive
HTTP / 1.1 400 BAD REQUEST
日期:2014年9月9日星期二15:38:31 GMT
服务器:Apache / 2.2.22(Ubuntu)
缓存控制:无缓存,无存储,必须重新验证,max-age = 0
变化:Cookie,接受编码
到期日:2014年9月9日星期二15:38:31 GMT
Last-Modified:Tue,09 Sep 2014 15:38:31 GMT
内容长度:34
连接:关闭
Content-Type:text / html; charset = utf-8
只接受http POST方法。
并且尚未调用GetLastError
。
这是正常的'行为,如果有的话,有没有办法抑制这种GET? 可能导致服务中止传入数据的处理。
奇怪的是它有效;该服务的数据库包含只能使用此界面输入的数据!
就相关性而言:该应用程序是在Windows XP专业系统上使用Delphi 2007开发的,最初经过测试并在Windows 8 Professional 64位上运行,它们都运行良好。任何一方的代码都没有变化(我没有,另一方告诉我他们也没有改变.Web服务是一个Python应用程序。)
答案 0 :(得分:0)
根据RFC 2616:
10.3.2 301永久移动
...
注意:在收到301状态代码后自动重定向POST请求时,某些现有的HTTP / 1.0用户代理将错误地将其更改为GET请求。
如果这就是WinInet实际上在做的事情,那么它就是做错了。它不应该在301重定向期间更改请求类型。很难说没有看到你的实际代码,而不是伪代码。