在命令窗口中使用curl for Aria项目,我得到了我想要的,但在PHP文件中它返回了空字符串



当我在gitbash:中键入此命令时

curl -i -X POST --header "content-type: application/json;charset=UTF-8" --header "Authorization: Bearer X" -d @RequestBody.json https://app.studio.arria.com:443/alite_content_generation_webapp/text/X

我得到:

HTTP/2 200日期:2018年11月22日星期四09:45:27 GMT内容类型:application/json;charset=UTF-8服务器:nginx

[{"errorType":null,"errorMessage":null、"warnings":[]、"result":">

Victoria土地面积227416平方公里,2016年人口该数字为5938100,比2010年的5547500增长了7.04%。 首都墨尔本有4353514人口,比2010年的3953939人增长10.11%,占73.31%该州人口的百分比。

总理丹尼尔·安德鲁斯(ALP(在他的第一个学期


","wordCount":60},{"errorType":null,"errorMessage":null、"warnings":[]、"result":">

澳大利亚首都领地的土地面积为2358平方米公里,2016年人口为390800人,比去年增长8.89%2010年的数字为358900 首都堪培拉有人口424666人,比2010年的398430人增加了6.58%,占该州人口的73.31%。

总理,Andrew Barr(ALP(学期


","wordCount":63},{"errorType":null,"errorMessage":null、"warnings":[]、"result":">

北领地的土地面积为1349129平方公里2016年的人口为244600人,比2010年的数字增长了6.49%229700;首都达尔文有123396人口,与2010年的112987相比增长了9.21%,占该州的人口。

总理迈克尔·冈纳(ALP(在他的第一个任期。


","wordCount":62}]

但当我使用PHP文件时,我会将从Curl获得的命令粘贴到PHP 中

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://app.studio.arria.com:443/alite_content_generation_webapp/text/X");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$post = array(
"file" => "@" .realpath("RequestBody.json")
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded";
$headers[] = "Authorization: Bearer X";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}else {
var_dump($result);
$json = json_decode($result,true);
var_dump($json);
}
curl_close ($ch);

var_dump($result)返回

string(0(">

var_dump($json)返回

我在这篇文章中将url中的授权承载和项目ID更改为X,但如果你认为问题可能出在这些方面,我可以发布原始命令。

RequestBody.json:

{
"data": [
{
"id": "Primary",
"type": "1d",
"dataSet": [
["State", "Premier", "Party", "Terms", "StateLandArea", "StatePop2010", "StatePop2016", "Capital", "CapitalPop2010", "CapitalPop2016"],
["Victoria", "Daniel Andrews", "ALP", "1", "227,416", "5,547,500", "5,938,100", "Melbourne", "3,953,939", "4,353,514"],
["the Australian Capital Territory", "Andrew Barr", "ALP", "1", "2,358", "358,900", "390,800", "Canberra", "398,430", "424,666"],
["the Northern Territory", "Michael Gunner", "ALP", "1", "1,349,129", "229,700", "244,600", "Darwin", "112,987", "123,396"]
]
}
],
"options": {
"nullValueBehaviour": "SHOW_IDENTIFIER",
"contentOutputFormat": "HTML"
}
} 

不要将@方法与php的libcurl包装器一起使用,它在php 5.5中被弃用,在php 5.6中默认禁用,在php 7.0中被完全删除。如果您使用的是PHP 5.5或更新版本,请使用CURLFile,

$post = array(
"file" => new CURLFile("RequestBody.json")
);

但这并不是你的php代码不起作用的原因,当你在php中给CURLOPT_POSTFIELDS一个数组时,curl将以multipart/form-data格式创建你的post请求,而你的curl-cli调用将发送json编码的数据。要让php-ccurl像cli调用一样在post-body中发送json,请直接将原始json字符串提供给CURLOPT_POSTFIELDS,或者如果文件中已经有响应,请使用CURLOPT_INFILE,

这应该是PHP中的等效请求:

$ch = curl_init ();
$fp = fopen ( "RequestBody.json", "rb" );
curl_setopt_array ( $ch, array (
CURLOPT_POST => 1,
CURLOPT_INFILE => $fp,
CURLOPT_HTTPHEADER => array (
"content-type: application/json;charset=UTF-8",
"Authorization: Bearer X" 
),
CURLOPT_URL => 'https://app.studio.arria.com:443/alite_content_generation_webapp/text/X' 
) );
curl_exec ( $ch );
curl_close ( $ch );
fclose ( $fp );

或者,如果您的请求主体是动态/可变的,您可以执行以下操作:

$post=array (
'data' => array (
array (
'id' => 'Primary',
'type' => '1d',
'dataSet' => array (
array (
'State',
'Premier',
'Party',
'Terms',
'StateLandArea',
'StatePop2010',
'StatePop2016',
'Capital',
'CapitalPop2010',
'CapitalPop2016' 
),
array (
'Victoria',
'Daniel Andrews',
'ALP',
'1',
'227,416',
'5,547,500',
'5,938,100',
'Melbourne',
'3,953,939',
'4,353,514' 
),
array (
'the Australian Capital Territory',
'Andrew Barr',
'ALP',
'1',
'2,358',
'358,900',
'390,800',
'Canberra',
'398,430',
'424,666' 
),
array (
'the Northern Territory',
'Michael Gunner',
'ALP',
'1',
'1,349,129',
'229,700',
'244,600',
'Darwin',
'112,987',
'123,396' 
) 
) 
) 
),
'options' => array (
'nullValueBehaviour' => 'SHOW_IDENTIFIER',
'contentOutputFormat' => 'HTML' 
) 
);

然后:

curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($post,JSON_PRETTY_PRINT));

而不是使用CURLOPT_INFILE。

相关内容

最新更新