gpt4 book ai didi

c++ - 如何使用curl将POST请求从python重写为C++

转载 作者:行者123 更新时间:2023-12-02 10:37:17 29 4
gpt4 key购买 nike

我对python有很多设置的POST请求,但我不理解它们在curl中的外观。

data_str = '{' + '"username": "{}", "domain_id": {}, "password": {}'.format(login, domain_id, password) + '}'
try:
data = requests.post("https://example.com/v/session",
proxies=proxy,
verify=False,
data=data_str,
headers={"Content-Type": "application/json;charset=UTF-8",
"Accept": "application/json"})
if is_json(data.text):
print(data)

我发现该网址设置了参数CURLOPT_URL,标题-CURLOPT_HTTPHEADER。但是如何设置代理,验证和数据呢?如何在python中获取json?
如何完成与python具有相同结果的代码:
CURL *curl = curl_easy_init();

struct curl_slist *list = NULL;

if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");

list = curl_slist_append(list, "Shoesize: 10");
list = curl_slist_append(list, "Accept:");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);

curl_easy_perform(curl);

curl_slist_free_all(list); /* free the list again */
}

最佳答案

为了从curl请求中获取返回数据,我们需要CURLOPT_WRITEFUNCTION选项的回调函数。proxydataverify参数应设置如下:

#include <iostream>
#include <string>
#include <curl/curl.h>

size_t curlWriter(void *contents, size_t size, size_t nmemb, std::string *s)
{
size_t newLength = size*nmemb;
try
{
s->append((char*)contents, newLength);
}
catch(std::bad_alloc &e)
{
//memory problem
return 0;
}
return newLength;
}
int main()
{
CURL *curl;
CURLcode res;

curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();

if(curl)
{
std::string strResponse;
std::string strPostData = "my data post";

curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/v/session");
curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L);

//set the proxy
curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy.net");
curl_easy_setopt(curl, CURLOPT_PROXYPORT, 8080L);

//verify=False. SSL checking disabled
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);


//set the callback function
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWriter);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strResponse);


/* size of the POST data */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strPostData.length() );

/* pass in a pointer to the data - libcurl will not copy */
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPostData.c_str() );

/* Execute the request */
res = curl_easy_perform(curl);

/* Check for errors */
if(res != CURLE_OK)
{
std::cerr << "CURL error : " << curl_easy_strerror(res) << std::endl;
}else {
std::cout << "CURL result : " << strResponse << std::endl;
}

curl_easy_cleanup(curl);
}
}

关于c++ - 如何使用curl将POST请求从python重写为C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59678524/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com