Web services HttpSenRequest POST==>GET?

Web services HttpSenRequest POST==>GET?,web-services,winapi,Web Services,Winapi,我连接到两个不相关的Web服务;两者都是通过传递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 optio

我连接到两个不相关的Web服务;两者都是通过传递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

获取我猜状态返回状态400:此错误为tekst

而且服务似乎不接受数据

但是,GetLastError返回0

嗅探器仅在执行HttOpenRequest调用时显示以下输出:数据不清晰,但全部有效

POST HTTP/1.1 内容类型:application/json 用户代理:MyConnector 主机:远程主机:端口 内容长度:21604 Pragma:没有缓存 {JSON string} HTTP/1.1 301永久移动 日期:2014年9月9日星期二15:38:31 GMT 服务器:Apache/2.2.22 Ubuntu 到期时间:2014年9月9日星期二15:38:31 GMT 缓存控制:无缓存,无存储,必须重新验证,最大年龄=0 最后修改:2014年9月9日星期二15:38:31 GMT 地点: 变化: 接受编码 内容长度:0 内容类型:text/html;字符集=utf-8

获取HTTP/1.1 用户代理:MyConnector 主机::远程主机:端口 Pragma:无缓存连接:保持活动状态 HTTP/1.1400错误请求 日期:2014年9月9日星期二15:38:31 GMT 服务器:Apache/2.2.22 Ubuntu 缓存控制:无缓存,无存储,必须重新验证,最大年龄=0 更改:Cookie,接受编码 到期时间:2014年9月9日星期二15:38:31 GMT 最后修改:2014年9月9日星期二15:38:31 GMT 内容长度:34 连接:关闭 内容类型:text/html;字符集=utf-8 只接受http POST方法

尚未调用GetLastError

这是“正常”行为吗?如果是,有没有办法抑制这种GET?它可能会导致服务中止对传入数据的处理

奇怪的是它起了作用;服务的数据库包含只能使用此界面输入的数据

就相关而言:该应用程序是在Windows XP professional系统上使用Delphi 2007开发的,最初是在Windows 8 professional 64位上测试和工作的,在那里它运行良好。两边的代码都没有改变,我的没有,另一边告诉我他们也没有改变任何东西。webservice是一个Python应用程序。

根据RFC 2616:

10.3.2 301永久移动 ... 注意:当收到301状态代码后自动重定向POST请求时,一些现有HTTP/1.0用户代理会错误地将其更改为GET请求


如果WinInet实际上就是这么做的,那么它就是在做错误的事情。它不应该在301重定向期间更改请求类型。如果没有看到您的实际代码,而不是伪代码,很难说清楚。

我想这确实是发生的事情。服务器已返回此代码,这引发了对代码的深入研究。结果表明,包含要执行的脚本的字符串没有以/结尾,服务器发出了一个重定向301,指向确切的字符串加上该/,而不是在内部处理它。。。。向字符串添加/解决了问题。