php的curl请求带form-data,带有Content-Disposition的PHP cURL:form-data

我将这个Instagram cURL转换成PHP看起来很迷惑,如下所示:

curl -F 'client_id=CLIENT_ID' \

-F 'client_secret=CLIENT_SECRET' \

-F 'grant_type=authorization_code' \

-F 'redirect_uri=AUTHORIZATION_REDIRECT_URI' \

-F 'code=CODE' \

https://api.instagram.com/oauth/access_token这是我当前的代码,有一个错误

{

"error_type": "OAuthException",

"code": 400,

"error_message": "You must provide a client_id"

}带样本值的当前代码:

$client_id = "7d60c47cdwe249069cdb07a0f28e19cb";

$client_secret = "de5awwe3ebf1443d8dcf0fbc88e5ab1b";

$grant_type = "authorization_code";

$redirect_uri = "http://sexample.net/create-code.php";

$code ="y23d86c19b4c3b0a8b561e64c93f2b3f";

$ch = curl_init();

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

//format URL to grant access to email and sitename passed

$data = '{"client_id":"'.$client_id.'","client_secret":"'.$client_secret.'","grant_type":"'.$grant_type.'","redirect_uri":"'.$redirect_uri.'","code":"'.$code.'"}';

curl_setopt($ch, CURLOPT_URL, 'https://api.instagram.com/oauth/access_token');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

//execute cURL call and get template data

$output = curl_exec($ch);

curl_close($ch);

echo $output;

好的,如果你需要在C语言中使用curl库发送multipart/form-data格式的POST请求,可以参考以下步骤: 1. 创建一个curl实例,并设置请求地址和请求方法为POST。 2. 设置请求头信息,包括Content-Type和boundary。 3. 组装请求参数,将需要上传的文件转化为二进制数据,并按照multipart/form-data格式进行拼接。 4. 使用curl_easy_setopt函数设置CURLOPT_POSTFIELDS选项,将请求参数作为POST请求的数据发送。 5. 调用curl_easy_perform函数发送请求并获取响应。 下面是一个示例代码,假设需要上传一个名为file.txt的文件: ```c #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type: multipart/form-data; boundary=------------------------1234567890"); curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/upload"); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); const char *boundary = "------------------------1234567890"; const char *filename = "/path/to/file.txt"; FILE *fp = fopen(filename, "rb"); fseek(fp, 0, SEEK_END); long file_len = ftell(fp); fseek(fp, 0, SEEK_SET); char *file_data = malloc(file_len); fread(file_data, file_len, 1, fp); fclose(fp); char *request_data; asprintf(&request_data, "--%s\r\n" "Content-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\n" "Content-Type: application/octet-stream\r\n" "\r\n" "%s\r\n" "--%s--\r\n", boundary, filename, file_data, boundary); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request_data); res = curl_easy_perform(curl); curl_slist_free_all(headers); curl_easy_cleanup(curl); free(request_data); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } } curl_global_cleanup(); return 0; } ``` 在示例代码中,我们创建了一个名为curlcurl实例,并设置请求地址和请求方法为POST。然后,我们设置了请求头信息,包括Content-Type和boundary。接着,我们读取文件内容并组装请求参数,最后使用curl_easy_setopt函数设置CURLOPT_POSTFIELDS选项,将请求参数作为POST请求的数据发送。最后,我们调用curl_easy_perform函数发送请求并获取响应。 你可以根据自己的需求进行更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值