我尝试使用CURL库实现多线程下载。
我准备 N 个线程(下载不同范围的简单句柄),然后调用curl_multi_perform(multiHandle, &running)。
我的问题
我正在使用cUrl使用他们发送给我的.cer证书从公司网站站点请求数据.这是命令:
cUrl --header "Content-Type: text/xml;charset=UTF-8" \
--data @bustaRequestISEE2015ConsultazioneAttestazione.xml \
-o bustaResponseISEE2015ConsultazioneAttestazione.xml \
--cert ./caaffabisrl.cer \
https://istitutonazionaleprevidenzasociale.spcoop.gov.it/PD
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到此错误消息:
curl:(58)无法加载PEM客户端证书,OpenSSL错误错误:0906D06C:PEM例程:PEM_read_bio:没有开始行,(找不到密钥,错误的密码短语或文件格式错误?)
有没有人可以帮助我?
Tks,克里斯蒂亚诺.
我正在遵循此指南:
http://lua-programming.blogspot.co.uk/
我是需要创建API的那一部分。我以前使用过kong,并创建了一个脚本来制作api。问题是我无法创建API。我的脚本实际上是一个没有插件的准系统api(想先创建一个api):
curl -X POST --url http://localhost:8001/apis/ --data 'name=mock' --data 'upstream_url=https://mockbin.com' --data 'request_host=mockbin.com';
每当我运行此命令时,都会出现curl: (52) Empty reply from server错误,但是当我执行该命令时curl -X GET --url http://localhost:8001/apis,它会告诉我当前有多少个api(为0),因此服务器肯定没有问题,对吗?
Ive在本地安装了cassandra和kong。有任何想法吗?
我编写了一个使用libcurl的多线程程序,但有时curl会抱怨它在exec curl_easy_perform之后无法解析主机名,有时候不会.
size_t Http::WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
MemoryStruct *mem = (MemoryStruct *)userp;
mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1);
assert(NULL != mem->memory);
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
void Http::run(const URL &url, Http::FinishedCallback cbk)
{
CURL *handle = curl_easy_init();
if (handle)
{
MemoryStruct *chunk = new MemoryStruct;
chunk->memory = (char *)malloc(1); /* will be grown as needed by the realloc above …Run Code Online (Sandbox Code Playgroud) 当我通过 curl 将 PUT 请求 API 发送到 REST 时,我发现了奇怪的行为。如果设置参数curl_setopt($curl, CURLOPT_PUT, true),则查询,其中 CURLOPT_POSTFIELDS 不为空,则查询执行持续 1.5 分钟(好像它取决于某个超时)。如果使用参数curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT")发送相同的请求,那么查询执行将持续大约 1 秒,这是应该的。有人可以解释这些参数之间的根本区别吗?
示例代码:
$data = http_build_query(array("enable"=> 1));
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, BASE_URL .'users/2');
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_PUT, true); // execution time 1.5 min
//curl_setopt ($ curl, CURLOPT_CUSTOMREQUEST, "PUT"); - execution time 1 sec
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$out = json_decode(curl_exec($curl));
curl_close($curl);
}
Run Code Online (Sandbox Code Playgroud) 根据这个https://curl.haxx.se/docs/http2.html
Since 7.47.0, the curl tool enables HTTP/2 by default for HTTPS connections.
使用自制软件安装最新版本并检查:
curl --version
curl 7.54.1 (x86_64-apple-darwin15.6.0) libcurl/7.54.1 SecureTransport zlib/1.2.5
Run Code Online (Sandbox Code Playgroud)
但curl在启用HTTP2的URL上运行(例如使用https://tools.keycdn.com/http2-test测试)我得到:
curl -I http://www.google.co.uk
HTTP/1.1 200 OK
Run Code Online (Sandbox Code Playgroud)
和
curl --http2 -v http://www.google.co.uk
curl: (1) Unsupported protocol
Run Code Online (Sandbox Code Playgroud)
知道为什么它使用HTTP/1.1而不是HTTP/2?
我正在尝试在 CMD 上运行此命令,并且该命令“似乎”运行没有错误,但我不确定它是否确实发出了请求。结果应以 Json 文件形式返回。
curl -H "Accept: application/json+v3" -H "x-api-key: <my_api_key>" \https://beta.check-mot.service.gov.uk/trade/vehicles/mot-tests\?registration=X182XCD
Run Code Online (Sandbox Code Playgroud)
这是 API 文档。
当我在 CMD 中运行此代码时,出现以下错误:
curl: (1) Protocol "\https" not supported or disabled in libcurl
Run Code Online (Sandbox Code Playgroud)
\从 中删除\https://似乎可以解决它。但我不确定这个命令是否执行成功。或者是否执行正确,只需要保存Json结果。我只需要将 Json 结果保存到一个文件中,然后我可以在其中处理它们。
在一个项目中,我看到同事在 GET CURL 请求中设置 -X 参数。我承认我不是专家,我总是在没有这个参数的情况下触发我的请求。它奏效了。我知道X代表请求。但仅此而已。
现在我的问题。是否有必要包含 X 参数?如果需要,为什么?
curl GET http://localhost:3000/api/projects/代替
curl -X GET http://localhost:3000/api/projects/。
我在失眠症中有一个请求。当我通过 Insomnia 发送时,没问题。但是当我生成curl 的源代码时,它向我展示了这一点。
\ncurl --request POST \\\n --url URL \\\n --header 'Authorization: bearer XXX' \\\n --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \\\n --cookie JSESSIONID=XXX \\\n --form datasetFile=@FOLDER/producthierarchyl1-1.zip\n\n{"message":"Bad Request","logref":null,"path":null,"_embedded":{"errors":[{"message":"Required argument [Publisher datasetFile] not specified","logref":null,"path":"/datasetFile","_embedded":{},"_links":{}}]},"_links":{"self":{"href":"/data-api/public-api/v4/datasets/ingestion/","templated":false,"profile":null,"deprecation":null,"title":null,"hreflang":null,"type":null,"name":null}}}\nRun Code Online (Sandbox Code Playgroud)\n失眠输出是这样的。
\n> POST PATH HTTP/2\n> Host: URL\n> user-agent: insomnia/2022.3.0\n> cookie: JSESSIONID=XXX\n> authorization: bearer XXX\n> content-type: multipart/form-data; boundary=X-INSOMNIA-BOUNDARY\n> accept: */*\n> content-length: 407\n\n* STATE: DO => DID handle 0x170404b14008; line 2077 (connection #27)\n* multi changed, check CONNECT_PEND queue!\n* STATE: DID => PERFORMING handle 0x170404b14008; line 2196 (connection …Run Code Online (Sandbox Code Playgroud) 这样,客户端可以在没有ALPN的情况下连接服务器并使用http/2默认值.
那可能吗?