我在理解如何工作时遇到了一个相当概念性的问题。我有一个大约20mb+的大JSON文件要使用post上传到外部api。我可以理解如何使用有限的数据,比如一组名称和作业(见下文(,但如何使用来自远程位置(例如我的桌面(的更大的"JSON文件"。例如,我需要从本地桌面选择文件,将其上传到云服务器,然后将其发送到post-api,还是可以从本地桌面直接发送到远程api?此外,这是我想要发送的JSON文件,而不仅仅是下面这样的有限日期。非常感谢任何指点。我正在使用Codeigniter 4x。
$data = array(
'name' => 'Thomas',
'job' => 'puntaro'
);
$payload = json_encode($data);
$request = curl_init();
$url ='https://reqres.in/api/users'; // just a fake api for now
curl_setopt($request, CURLOPT_URL, $url);
curl_setopt($request, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($request, CURLOPT_POSTFIELDS, $payload);
curl_setopt($request, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($request);
echo '<pre>';
print_r($response);
print_r(json_decode($response)); // add ,true to change to array
echo '</pre>';
curl_close($request);
例如,当您执行HTTPS请求时,您需要使用:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
并且您不将post字段作为JSON发送
有两种方法可以制作你的帖子数据。
$post = 'key1=value1&key2=value2&key3=value3';
$post = array('key1'=>value1,'key2'=>value2,'key3'=>'value3');
您可能需要使用更好的CURLOPT_HTTPHEADER
这是我的基本标头。我使用一个模糊的UA,因为他们将无法配置我的UA。
$request = array();
$request[] = "Host: www.example.com";
$request[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$request[] = "User-Agent: MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0";
$request[] = "Accept-Language: en-US,en;q=0.5";
$request[] = "Connection: keep-alive";
$request[] = "Cache-Control: no-cache";
$request[] = "Pragma: no-cache";
POST数据总是发送一个密钥=>value
并且文件上载与发布数据不同
您需要知道要使用的键值
虽然我怀疑是这样,但你可以试着发布这样的数据
$postdata = array('keyname'=>$payload);
curl_setopt($request, CURLOPT_POSTFIELDS, $postdata );
如果你真的认为你应该发帖,那么我有很多解决问题的技巧。
我有理由认为你需要上传一个文件
PHP curl_file_create
更新
我有一些post字段需要key=>值,但我也有大型json文件。可以同时发送吗?
尝试CURLFile类。
$upload= new CURLFile($filename);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['upload' => $upload]);
或者将$upload与其他post键值字段一起添加到数组中。