0

我知道有很多与此问题相关的问题,但我面临着将数据从 PHP 发布到 Rest Web 服务的特定要求。上面解释了详细信息,但总而言之,当我将数据发布到 url (REST WS) 并设置 CURLOPT_POSTFIELDS 时,数据不会被添加到请求中。

场景:我有很多作为模块运行的 Java Web 服务 (REST),例如,我有一个作为 REST 的 fileUploadModule,我有一个作为另一个 REST 的 databaseModule,最后是一个作为另一个 REST 的 SearchModule。

我可以使用以下链接直接调用它们我的其余模块:

http://[MY IP]:8020/system.file.ws.module.ModuleFile/getResults/jsonp?fileName=fileName
http://[MY IP]:8021/system.search.ws.module.ModuleSearch/getResults/jsonp?xmlQuery=myXml

对于文件和数据库的情况,在我之前管理代码的程序员使用通过代理连接到模块的 gwt;例如:

http://[MY_PROXY_IP]:8013/system.file.ws.module.ModuleFile/getResults/jsonp?fileName=fileName

在我的代理中,我可以打印收到的请求的值,在这种情况下,我使用 GET 并且可以将请求打印为:

GET /system.file.ws.module.ModuleFile/getResults/jsonp?fileName=idc1&folderType=campaign&callback=__gwt_jsonp__.P0.onSuccess&failureCallback=__gwt_jsonp__.P0.onFailure HTTP/1.1

. 现在我负责应该通过 PHP 运行的搜索。我直接测试了模块的url并且它可以工作,但是如果我通过代理尝试它似乎不起作用,它会到达我的代理但是当我打印请求时它是不完整的:

POST /system.search.ws.module.ModuleSearch/getResults HTTP/1.1

我应该收到类似模块文件的东西,我分享我的 php 代码,一切似乎都很好,但我不知道我做错了什么......当我在 CURLOPT_POSTFIELDS 中设置参数时,字符串不是被设置

 $url = "http://192.168.3.41:8013/system.search.ws.module.ModuleSearch/getResults"; 
try {
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST, 1);
$rawXml = $_POST['rawXml'];
$rawXml = str_replace("%", "%25", $rawXml);
$rawXml = str_replace("&", "%26", $rawXml);
$rawXml = str_replace("=", "%3D", $rawXml);
echo $rawXml;   
curl_setopt ($ch, CURLOPT_POSTFIELDS,'xmlQuery='.$rawXml);
$info = curl_exec ($ch);
curl_close ($ch);
echo $info;
} catch (Exception $e){
 echo $e->getMessage(); 
}

请非常感谢您的帮助或意见。比你提前很多。

4

1 回答 1

0

很久之后,我看到这个没有答案。前段时间我发现了这个失败。出现此问题是因为,当到达服务器端时,由于某种原因,我没有注意到的批处理文件在我的内容中添加了额外的行,并且每当我使用代理读取请求内容时,我使用了“\n”分隔符,我意思是,我一直在使用跳线作为 EOF 指示器来读取我的数据,这就是为什么从未显示内容的原因。我不得不修改代理内部的代码,以允许读取请求直到结束,而不是在找到“\n”字符时。我的意思是,帖子的内容在每种情况下都是设置的,但是批处理正在破坏该数据。所以这就是问题所在,我只是通过确保我的读者总是阅读我的整个文件来解决它,甚至考虑到行跳转和白线。

问候。

于 2014-04-29T22:42:02.787 回答