我想使用PHP curl_*方法构造一个POST请求,它执行以下操作:
例如,以下代码有效,因为文本字符串中没有前导"@"字符:
<?php
$postfields = array(
'upload_file' => '@file_to_upload.png',
'upload_text' => 'text_to_upload'
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://example.com/upload-test');
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
curl_exec($curl);
curl_close($curl);
?>
Run Code Online (Sandbox Code Playgroud)
但是,如果字符串以"@"字符开头,则会中断,这会导致curl查找名为"text_to_upload"的不存在的文件(请注意,唯一的更改是在upload_text字段中添加前导"@"字符):
<?php
$postfields = array(
'upload_file' => '@file_to_upload.png',
'upload_text' => '@text_to_upload'
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://example.com/upload-test');
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
curl_exec($curl);
curl_close($curl);
?>
Run Code Online (Sandbox Code Playgroud)
那么......在使用PHP中的curl_*方法同时上传文件时,是否可以发送带有前导"@"字符的文本?
最终结果(如果可能)应该相当于curl的命令行使用:
curl -F 'upload_=@file_to_upload.png' --form-string 'upload_text=@text_to_upload' 'http://example.com/upload-test'
Run Code Online (Sandbox Code Playgroud)
谢谢!
替代方案1
您很可能必须对参数进行urlencode 。
$postfields = array(
'upload_file' => '@file_to_upload.png',
'upload_text' => urlencode('@text_to_upload')
);
Run Code Online (Sandbox Code Playgroud)
另外,在服务器端进行 urldecode 。
替代方案2
upload_text无论其内容如何,只需在开头添加一个空格即可。
$postfields = array(
'upload_file' => '@file_to_upload.png',
'upload_text' => ' @text_to_upload'
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2083 次 |
| 最近记录: |