我正在使用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