curl和浏览器提供不同的http响应[重复]
Posted
技术标签:
【中文标题】curl和浏览器提供不同的http响应[重复]【英文标题】:Curl and browser provide different http responses [duplicate] 【发布时间】:2021-02-12 01:19:53 【问题描述】:我有一个小问题,我想从我的应用程序的这个 URL 中恢复 JSON 格式的数据:https://www.oscaro.com/xhr/dionysos-search/fr/fr?plate=AD865ZF
当我在浏览器上输入这个网址时,它可以完美运行。
但是,当我尝试在 php (curl) 或 javascript (xhr) 中从我的应用程序中恢复此 JSON 时,我无法恢复数据,出现 CORS 错误。
您知道如何从我的应用程序中恢复这些数据吗?
提前谢谢你,
此致,
【问题讨论】:
您可能需要在请求中添加一些头部信息 CORS 仅适用于在浏览器中从客户端发出的请求。使用 cURL 时遇到 CORS 错误的可能性很小。 (但是,在任何情况下,远程方都可能需要一个Origin
标头,并在缺少该标头时拒绝您的请求。但根据定义,这实际上不是 CORS 错误。)
当我在浏览器中尝试该 URL 时,我首先看到的是 Cloudflare 的“检查您的浏览器”页面。 那是您的问题的原因,与 CORS 无关(至少对于您的服务器端尝试而言)。该 URL 受到保护,不被“机器人”访问。
请分享更多详细信息,例如您正在使用的代码。我怀疑 PHP 评估 CORS 标头
如果启用了 cloudflare,我如何检索信息?
【参考方案1】:
简而言之,您的请求中需要标头以匹配浏览器的请求:
在浏览器中打开开发工具(例如 F12 或 cmd+opt+I 或单击菜单) 打开网络标签 重新加载页面(整个网站或目标请求的 url,无论是从服务器提供所需响应的任何内容) 在“网络”选项卡中找到对所需 URL 的 http 请求。右键单击它,单击“复制...”,然后选择您需要的选项(例如 curl)。您的浏览器会发送大量额外的标头,您永远不知道服务器实际检查了哪些标头,因此这种技术将为您节省大量时间。
但是,如果有一些针对钝请求副本的保护措施,例如,这可能会失败。一些临时令牌,因此无法重用请求。在这种情况下你需要Selenium(浏览器仿真/自动化),它并不难,所以值得使用。
【讨论】:
不!这与所需要的完全相反。 server 需要在 response 中授予权限,以便浏览器允许网站上的 JavaScript 读取响应。 让我们等待@Valentin 结果,如果它有效的话。目前尚不清楚他是在浏览器中使用 JS 还是只是来自后端的独立请求。如果他报告这个失败,我会杀死答案。 我正在使用一个简单的后端请求,我没有检索任何 JSON,因为有一个需要等待 5 秒的 cloudflare 保护,我不知道如何绕过它 作为最后的手段,你总是可以在 Selenium 中运行它,在其中等待 5 秒。 无论如何,如果您再花一分钟在这里报告适用于您的解决方案,那将非常棒。当你找到一个时,确实如此。祝你好运以上是关于curl和浏览器提供不同的http响应[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux 中使用 cURL 进行 HTTP POST 和 GET [重复]