【问题标题】:PHP GET Request not workingPHP GET请求不起作用
【发布时间】:2012-08-24 16:19:08
【问题描述】:

当我在浏览器中输入http://rest.example.com/account/get-balance/27e3xxx/7vvU4c95trfxxxx 并回车时,我得到以下 XML 响应。

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

但是当我在 PHP 中尝试相同的 URL 时,它发送的响应是找不到页面(糟糕!那个页面不存在。)。以下是我尝试的几种方法...

使用 SimpleXML

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

使用文件方法

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

使用 CURL

    // 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-&gt;request_uri = 我在浏览器中粘贴的相同 URL。我哪里错了?请帮助我。谢谢。

【问题讨论】:

  • 同意。检查:1.cookies 2.referer 3.user-agent
  • @Peter,检查后会发生什么?有什么提示吗?
  • 我的意思是你应该在 cURL 请求中使用与浏览器相同的 Cookie、Referer 和 User

标签: php xml curl get


【解决方案1】:

从浏览器传输到服务器的信息不仅仅是 URI:

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

通过只传递URI而不传递从浏览器传递的其他信息,您可以正常得到不同的结果。在您的情况下,很明显您会得到不同的结果。

了解当您使用浏览器请求该 URI 时传递给服务器的其他信息。其他信息称为请求行、请求标头和正文。在 GET 请求中,请求正文通常为空,因此您只需关注请求行和标头,请参阅:

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

然后,您可以使用 PHP's HTTP wrapper context optionsDocsCurl extension and it's endless array of optionsDocs 轻松模仿请求以实现您想要的。

【讨论】:

  • 很好的解释......但是我的问题将如何解决?或者我必须做什么?
  • 任何浏览器同样的问题,也不应该依赖于浏览器,这是短信应用程序。
  • 浏览器有同样的问题吗?我读过它适用于浏览器的问题,现在您告诉它在任何浏览器中都不起作用?那我强烈建议你联系其他服务商的技术支持,向他们澄清问题,必须有一些依赖于行业标准的技术规范。然后,您可以研究使用的标准,然后进行一些 curl 学习/培训,以便了解如何使用该工具和标准,然后您应该能够自己弄清楚。
  • 对不起,这意味着using the url inside php 不支持任何浏览器。当我直接在浏览器中键入 URL 并按 Enter 时,它工作正常。
  • 非常感谢。通过添加curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json')); 也解决了问题curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/xml'));
猜你喜欢
  • 1970-01-01
  • 2017-07-04
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多