cURL脚本手动运行正常,PHP/Cron执行报错的解决
问题:Cron或PHP调用Shell脚本执行cURL返回JSON格式错误
我编写了nn.sh脚本,内容如下:
#/bin/sh cd /var/www/html /usr/bin/curl 'https://web-api.wtnnip.com/app' \ -H 'authority: web-api.wtnnip.com' \ -H 'accept: */*' \ -H 'accept-language: ro-RO,ro;q=0.9,en-US;q=0.8,en;q=0.7' \ -H 'content-type: application/json' \ -H 'origin: https://www.wtnnip.com' \ -H 'referer: https://www.wtnnip.com/ro-RO/non-professional' \ -H 'sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "Linux"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: same-site' \ -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36' \ --compressed
手动执行脚本或在终端直接运行cURL命令均正常,能获取JSON集合。但通过Cron执行该脚本,或PHP用exec/passthru调用时,返回如下错误:
{"errors" : [ { "message" : "Invalid JSON payload in GraphQLAuth POST request.", "errorType" : "MalformedHttpRequestException" } ] }
PHP直接调用cURL也出现相同错误。
补充环境信息:
- Debian 11、PHP 7.4、cURL 7.74
- 默认Shell为bash,曾尝试将脚本首行改为
#/bin/bash
解决方法
将脚本首行改为#!/bin/bash,此前遗漏了开头的感叹号。
内容的提问来源于stack exchange,提问作者Ciprian
相关产品推荐
相关产品推荐

