WP_Remote_Get()未正确检索页面

时间:2016-02-03 作者:Greeso

我正在使用wp_remote_get() 从web检索不同的页面。这是一个新闻网站。

大多数情况下,这是成功的。然而,有时,请求返回成功(代码200),但页面内容与brwoser检索到的页面不同(此调用返回的页面内容类似于“未找到页面”)

但是,如果我使用任何浏览器检索有问题的页面,则会成功返回该页面。

以下是一个示例:

// The following returns code 200, yet the returned page is different from the acual page that is accessed via the browser
wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7");
NOTE: 为了验证,我查看了返回的页面vie PHP和通过浏览器返回的页面源代码,它们是不同的。

我不确定是什么问题。我怀疑这可能与wp_remote_get(), 然而documentation 关于论点不清楚。

是争论吗?如果是,如何设置?如果没有,您怀疑问题出在哪里?

阅读以下评论后,重要更新和解决方案zendka 他说:“我得到了完全相同的内容。我只是再次检查并将响应正文与浏览器的页面源进行比较。它们完全相同:)”,我意识到了一些非常重要的事情。

中的代码中使用的原始URLwp_remote_get()http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا

电话是这样的

// Causes problems
wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا");
此问题中使用和最初描述的URL为

// Runs successfully
wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7");

NOTE THE FOLLOWING:

<要使用的url的ol>
  • wp_remote_get() 在不引起任何问题或错误的情况下,它不应采用以下格式http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا 但它应该按如下方式编码http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7.

    原因wp_remote_get() 无法使用http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا 是因为它无法处理此utf8格式。为了让它正常工作,only the path of the url 应转换为百分比编码格式。此外,路径中的任何斜杠(/)字符都不应进行编码,否则wp_remote_get() 将无法找到该页面,因此我们得到一个包含404页面内容的成功代码(200)。因此,此格式http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7 传递到时工作正常wp_remote_get().

    我报告格式不正确的原因是在测试过程中,我从Firefox复制了url并粘贴到这里。Firefox会自动将格式转换为“正确”格式。详情如下:https://superuser.com/questions/480692/copying-unicode-symbols-from-firefox-address-bar-as-is

  • The solution

    <验证URL的百分比格式是否正确

    使用新格式的urlwp_remote_get()

    Helpful Resources

    https://github.com/neitanod/forceutf8

    https://stackoverflow.com/questions/910793/detect-encoding-and-make-everything-utf-8

    https://stackoverflow.com/questions/2742852/unicode-characters-in-urls

    https://stackoverflow.com/questions/9831077/how-to-url-encode-only-non-ascii-symbols-of-url-in-php-but-leave-reserved-symbo

    https://stackoverflow.com/questions/25465114/php-str-replace-not-working-with-special-chars

    1 个回复
    最合适的回答,由SO网友:zendka 整理而成

    发送的HTTP请求wp_remote_get() 与浏览器发送的不同。E、 g theuser-agent 不同(请参见documentation). 一些网站对此做出了不同的回应。的第二个参数wp_remote_get() 允许更改请求。

    根据IP或收到的请求数量,网站可能会做出不同的响应(通常通过限制或禁止某些模式)。

    顺便说一下,我测试了你提到的页面,它对我很有用:

    wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7");