2012-08-24 108 views
1

当我在浏览器中输入http://rest.example.com/account/get-balance/27e3xxx/7vvU4c95trfxxxx并点击回车时,我得到以下XML响应。PHP GET请求无法正常工作

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?> 
<accountBalance> 
    <creditLimit>0.0</creditLimit> 
    <quotaEnabled>true</quotaEnabled> 
    <value>2.0</value> 
</accountBalance> 

,但是当我试图同一个URL里面PHP是发送响应找不到网页(糟糕!该网页不存在。)。这里有一些方法,我尝试...

使用SimpleXML

$content = simplexml_load_file($this->request_uri); 

使用文件的方法

$content = file_get_contents($this->request_uri); 

使用我贴卷曲

// create a new cURL resource 
    $ch = curl_init(); 

    // set URL and other appropriate options 
    curl_setopt($ch, CURLOPT_URL, $this->request_uri); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 

    // grab URL and pass it to the browser 
    $content = curl_exec($ch); 

    // close cURL resource, and free up system resources 
    curl_close($ch); 
  • $this->request_uri =相同的URL在浏览器中。我错在哪里?请帮助我。谢谢。
+4

同意。检查:1. cookies 2. referer 3.用户代理 – Peter

+0

@Peter,检查后会发生什么?任何提示? –

+0

我的意思是你应该在cURL请求中使用与浏览器相同的Cookies,Referer和User。 – Peter

回答

1

有正从浏览器转移到服务器比只有URI的更多信息:只透过URI,但没有通过,但未通过浏览器传递的其他信息

http://rest.example.com/account/get-balance/27e3xxx/7vvU4c95trfxxxx 

,你通常可以得到不同的结果。在你的情况下,显然你会得到不同的结果。

了解当您使用浏览器请求URI时,传递给服务器的其他信息。这些其他信息被称为请求线,请求头和主体。在GET请求,请求体通常是空的,所以你只需要集中精力请求线和头,请参阅:

联系你的浏览器的技术文档,如果有所谓的网络工具,它们能够显示整个请求信息用于调试目的(例如Chromium有这个功能,Firefox有Firebug扩展功能)。

然后,您可以通过PHP's HTTP wrapper context optionsDocsCurl extension and it's endless array of optionsDocs轻松地模拟请求以实现您想要的功能。

+0

非常好的解释......但我的问题将如何解决?或者我必须做什么? –

+0

您使用哪个浏览器? – hakre

+0

任何浏览器相同的问题,也不应该依赖浏览器,这是短信应用程序。 –