通过php's curl和direct,应用程序的工作方式不同


Application works differently via php's curl than direct

这可能没有任何意义,但这就是我在这里的原因。我继承了一个网站,我正试图增加一些"功能",就像弗兰肯斯坦需要第二条左臂。

应用程序的一部分向全国各地的各种服务提供商调用大约10个不同的API以获取报价。它通过生成几个不同的url并使用mcurl并行地获取它们来实现这一点。它们都不返回任何html,它们各自查询一个API并更新数据库。

它需要几秒钟才能运行,在进行API查询时旋转轮子,但是数据库中没有更新任何内容。我可以在日志中看到请求的每个url。如果我取其中一个url,并把它放在浏览器的地址栏中,它工作得很好。调用api并更新数据库。

等等,还有呢!为了调试这些单独的脚本(因为它们没有输出),我使用fwrite()。当我在浏览器的地址栏中使用URL时,这是有效的,但是没有写任何东西,然后所有脚本都通过mcurl执行。(确切地说是multi-curl_execute())

简而言之,当php使用curl执行脚本时,它不会更新mysql数据库,并且它不允许我打开文件。如果我将GET请求从日志中剪切/粘贴到浏览器的地址栏中,这些方法确实有效。

现在这个软件已经在现场生产了一段时间,并按预期为他们工作。我正在本地机器上进行开发,这就是它失败的地方。它必须是非常简单的东西。

——戴夫

它必须是与请求一起发送的HTTP标头中的内容。

如果你可以访问web服务的代码(在你的帖子中没有提到),你可以将标题转储到那一边,将其写入文件或电子邮件,并看到mcurl调用和浏览器调用之间的区别。

$_SERVER数组包含它们,它们的名称前加上"HTTP"。

另一个想法是在客户端窃听它,从哪里来的mcurl或浏览器,虽然坦率地说,我不确定你怎么去做,没有嗅探网络。