cURL在终端中运行良好,但在脚本中出现500错误

时间:2016-09-26 01:59:54

标签: php curl terminal

我遇到类似于此处描述的问题,但建议的解决方案对我不起作用:

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或其他什么时会发生什么变化?

2 个答案:

答案 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);