PHP发布的数据未设置为调用Java Rest Web Service

时间:2013-05-29 16:36:27

标签: java php rest curl

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

场景:我有很多Java Web Services(REST)作为模块运行,例如,我有一个文件UPploadModule,它是一个REST,我有一个databaseModule,这是另一个休息,最后是一个SearchModule,这是另一个REST

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

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(); 
}

请非常感谢您的帮助或观察。比你提前多了。

1 个答案:

答案 0 :(得分:0)

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

问候。