我遇到类似于此处描述的问题,但建议的解决方案对我不起作用:
PHP CURL GET request returns 500 where bash curl succeeds
建议的解决方案是:
"事实证明,我访问的API需要一个User-Agent来处理所有请求,但没有提供任何信息来表明这些。"
哪个对我不起作用。
如果我打开终端窗口并执行此操作:
卷曲" http://needi.local:8080/search/uber" -X GET --header'接受:application / json' --header' x-api-key:2gt7Pt2LU194KKcNnc'我得到了我期望的所有结果。它很棒。
如果我创建这个PHP文件:
<?php
$command = "curl 'http://needi.local:8080/search/uber' -X GET --header 'Accept: application/json' --header 'x-api-key: 2gt7Pt2LU194KKcNnc'
echo passthru($command);
这让我:
php -f tests/functional/curl_external_api_tests.php
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 109 100 109 0 0 2893 0 --:--:-- --:--:-- --:--:-- 2945
{
"statusCode": 500,
"error": "Internal Server Error",
"message": "An internal server error occurred"
}
添加用户代理无法解决问题:
$command = "curl 'http://needi.local:8080/search/uber' -X GET --header 'Accept: application/json' --header 'x-api-key: 2gt7Pt2LU194KKcNnc' --header 'User-Agent: PHP-test/1.0'
问题还有什么呢?
[更新:]
如果有人认为这是关于PHP的问题,我很抱歉。我应该改写为&#34;脚本中可能有什么不同,相对于我在终端中所做的事情?&#34;我也尝试使用bash,我得到了同样的错误。但是cURL在终端工作。那么当我离开终端而不是使用bash或PHP或其他什么时会发生什么变化?
答案 0 :(得分:0)
我怀疑你的curl参数会被截断,所以curl永远不会传递标题。请尝试使用escapeshellarg
并查看是否有帮助。
答案 1 :(得分:0)
最后,我在API应用中发现了一个错误。所以对于遇到这个问题的其他人,我想强调我的PHP工作得很好。我确实达到了这个目的:
<?php
$command = "curl 'http://needi.local:8080/search/uber' -X GET --header 'Accept: application/json' --header 'x-api-key: 2gt7Pt2LU194KKcNnc'
echo passthru($command);