Curl 8 2 0
Author: e | 2025-04-24
Wget/cURL alternative native to Windows? 4. HTTP responses curl and wget different results. 8. How to see HTTP request header by curl? 9. cURL: multiple POST requests while reusing the TCP connection. 2. curl capturing http status and timing the request. 6. cURL command runs in Linux but not Windows 2025. 0.
curl: (92) HTTP/2 stream 0 was not closed cleanly:
Hi @bagderI am using curl with --http3-only option to download file from nginx server.From below curl man page and help page i came to know that using --http3 will allow to fall back ,--http3-only will not allow to fallback but seems to be with --http3-only also curl is falling back and using http1.1man curl:---http3-onlysion on its own. Use --http3 for similar functionality with a fallback.Instructs curl to use HTTP/3 to the host in the URL, with no fallback to earlier HTTP versions.This option will make curl fail if a QUIC connection cannot be established, it will not attempt any other HTTP version on its own --http3 Use --http3-only for similar functionality without a fallback.Tells curl to try HTTP/3 to the host in the URL, but fallback to earlier HTTP versions if the HTTP/3 connection establishment failscurl --help all :---http3 Use HTTP v3--http3-only Use HTTP v3 onlyroot@ubuntu:~# curl -# -v -k --http3-only -o index.html 127.0.0.1:443...Connected to 127.0.0.1 (127.0.0.1) port 443 (#0)ALPN: offers http/1.1} [5 bytes data]TLSv1.3 (OUT), TLS handshake, Client hello (1):} [512 bytes data]TLSv1.3 (IN), TLS handshake, Server hello (2):{ [88 bytes data]TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):} [1 bytes data]TLSv1.3 (OUT), TLS handshake, Client hello (1):} [512 bytes data]TLSv1.3 (IN), TLS handshake, Server hello (2):{ [155 bytes data]TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):{ [21 bytes data]TLSv1.3 (IN), TLS handshake, Certificate (11):{ [768 bytes data]TLSv1.3 (IN), TLS handshake, CERT verify (15):{ [264 bytes data]TLSv1.3 (IN), TLS handshake, Finished (20):{ [52 bytes data]TLSv1.3 (OUT), TLS handshake, Finished. Wget/cURL alternative native to Windows? 4. HTTP responses curl and wget different results. 8. How to see HTTP request header by curl? 9. cURL: multiple POST requests while reusing the TCP connection. 2. curl capturing http status and timing the request. 6. cURL command runs in Linux but not Windows 2025. 0. Unable to install rvm using curl (https protocol issue) 0. Update PHP to use latest Curl Version. 0. Update Curl on Ubuntu 14.04.3. 2. Unable to install Curl. 1. apt upgrade has a Using PHP CURL to download a file. 2. cURL download file via browser. 11. Download file from URL using CURL. 0. php curl save download file. 0. php curl download file from url. Hot curl issue: How to post json format data to server using curl in windows cmd? 2. Elastic Search curl command not recognised in Windows. 0. Need curl command to How can I download gitlab CI/CD artifacts with curl? 0. Overwriting a file from GitLab using curl. Related. 2. Is there any way to get Gitlab pipeline artifacts in Jenkins? 8. Download a single file from GitLab artifacts archive. 2. doing this curl -upload-file quiet_01.txt and it returns curl: (92) HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2) Download a file with cURL. 1. Curl download file from command line. 1. How to wget/curl past a redirect to download content? 2. Piping wget into curl. 0. How to Set up curl Using cURL to download a dropbox link which is protected with password. 0. Downloading Dropbox folder with curl/requests. 2. Using curl to upload to dropbox file NoticeThe URL of the result image is valid for 1 hour. Please download the image file promptly.Supported ImagesFormatResolutionFile sizejpg, jpeg, bmp, png, webp, tiff, tif, bitmap, raw, rgb, jfif, lzwUp to 4096 x 4096Up to 15MBGet StartedSee differences between the 3 API call types #Create a task.curl -k ' \-H 'X-API-KEY: YOUR_API_KEY' \-F 'sync=0' \-F 'image_url=YOU_IMG_URL'#Get the cutout result#Polling requests using the following methods 1. The polling interval is set to 1 second, 2. The polling time does not exceed 30 secondscurl -k ' \-H 'X-API-KEY: YOUR_API_KEY' \php//Create a task$curl = curl_init();curl_setopt($curl, CURLOPT_URL, ' CURLOPT_HTTPHEADER, array( "X-API-KEY: YOUR_API_KEY", "Content-Type: multipart/form-data",));curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_POST, true);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_POSTFIELDS, array('sync' => 0, 'image_url' => "YOUR_IMG_URL"));$response = curl_exec($curl);$result = curl_errno($curl) ? curl_error($curl) : $response;curl_close($curl);$result = json_decode($result, true);if ( !isset($result["status"]) || $result["status"] != 200 ) { // request failed, log the details var_dump($result); die("post request failed");}// var_dump($result);$task_id = $result["data"]["task_id"];//get the task result// 1、"The polling interval is set to 1 second."//2 "The polling time is around 30 seconds."for ($i = 1; $i 30; $i++) { if ($i != 1) { sleep(1); } $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, " curl_setopt($curl, CURLOPT_HTTPHEADER, array( "X-API-KEY: YOUR_API_KEY", )); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); $result = curl_errno($curl) ? curl_error($curl) : $response; curl_close($curl); var_dump($result); $result = json_decode($result, true); if ( !isset($result["status"]) || $result["status"] != 200 ) { // Task exception, logging the error. //You can choose to continue the loop with 'continue' or break the loop with 'break' var_dump($result); continue; } if ( $result["data"]["state"] == 1 ) { // task success var_dump($result["data"]["image"]); break; } else if ( $result["data"]["state"] 0) { // request failed, log the details var_dump($result); break; } else { // Task processing if ($i == 30) { //Task processing, abnormal situation, seeking assistance from customer service of picwish } }}public static void main(String[] args) throws Exception { String taskId = createTask(); String result = pollingTaskResult(taskId, 0); System.out.println(result);}private static String createTask() throws Exception { OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("image_url", "IMAGE_HTTP_URL") .addFormDataPart("sync", "0") .build(); Request request = new Request.Builder() .url(" .addHeader("X-API-KEY", "YOUR_API_KEY") .post(requestBody) .build(); Response response = okHttpClient.newCall(request).execute(); JSONObject jsonObject = new JSONObject(response.body().string()); int status = jsonObject.optInt("status"); if (status != 200) { throw new Exception(jsonObject.optString("message")); } return jsonObject.getJSONObject("data").optString("task_id");}private static String pollingTaskResult(String taskId, int pollingTime) throws Exception { if (pollingTime >= 30) throw new IllegalStateException("Polling result timeout."); OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); Request taskRequest = new Request.Builder() .url(" + taskId) .addHeader("X-API-KEY", "YOUR_API_KEY") .get() .build(); Response taskResponse = okHttpClient.newCall(taskRequest).execute(); JSONObject jsonObject = new JSONObject(taskResponse.body().string()); int state = jsonObject.getJSONObject("data").optInt("state"); if (state 0) { // Error. throw new Exception(jsonObject.optString("message")); } if (state == 1) { // Success and get result. return jsonObject.getJSONObject("data").toString(); } Thread.sleep(1000); return pollingTaskResult(taskId, ++pollingTime);}const request = require("request");const fs = require("fs");const path = require('path')const API_KEY = "YOUR_API_KEY";(async function main() { const taskId = await createTask() const result = await polling(() => getTaskResult(taskId)) console.log(`result: ${JSON.stringify(result, null, 2)}`)})()const polling = async (fn, delay = 1 * 1000, timeout = 30 * 1000) => { if (!fn) { throw new Error('fn is required') } tryComments
Hi @bagderI am using curl with --http3-only option to download file from nginx server.From below curl man page and help page i came to know that using --http3 will allow to fall back ,--http3-only will not allow to fallback but seems to be with --http3-only also curl is falling back and using http1.1man curl:---http3-onlysion on its own. Use --http3 for similar functionality with a fallback.Instructs curl to use HTTP/3 to the host in the URL, with no fallback to earlier HTTP versions.This option will make curl fail if a QUIC connection cannot be established, it will not attempt any other HTTP version on its own --http3 Use --http3-only for similar functionality without a fallback.Tells curl to try HTTP/3 to the host in the URL, but fallback to earlier HTTP versions if the HTTP/3 connection establishment failscurl --help all :---http3 Use HTTP v3--http3-only Use HTTP v3 onlyroot@ubuntu:~# curl -# -v -k --http3-only -o index.html 127.0.0.1:443...Connected to 127.0.0.1 (127.0.0.1) port 443 (#0)ALPN: offers http/1.1} [5 bytes data]TLSv1.3 (OUT), TLS handshake, Client hello (1):} [512 bytes data]TLSv1.3 (IN), TLS handshake, Server hello (2):{ [88 bytes data]TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):} [1 bytes data]TLSv1.3 (OUT), TLS handshake, Client hello (1):} [512 bytes data]TLSv1.3 (IN), TLS handshake, Server hello (2):{ [155 bytes data]TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):{ [21 bytes data]TLSv1.3 (IN), TLS handshake, Certificate (11):{ [768 bytes data]TLSv1.3 (IN), TLS handshake, CERT verify (15):{ [264 bytes data]TLSv1.3 (IN), TLS handshake, Finished (20):{ [52 bytes data]TLSv1.3 (OUT), TLS handshake, Finished
2025-04-10NoticeThe URL of the result image is valid for 1 hour. Please download the image file promptly.Supported ImagesFormatResolutionFile sizejpg, jpeg, bmp, png, webp, tiff, tif, bitmap, raw, rgb, jfif, lzwUp to 4096 x 4096Up to 15MBGet StartedSee differences between the 3 API call types #Create a task.curl -k ' \-H 'X-API-KEY: YOUR_API_KEY' \-F 'sync=0' \-F 'image_url=YOU_IMG_URL'#Get the cutout result#Polling requests using the following methods 1. The polling interval is set to 1 second, 2. The polling time does not exceed 30 secondscurl -k ' \-H 'X-API-KEY: YOUR_API_KEY' \php//Create a task$curl = curl_init();curl_setopt($curl, CURLOPT_URL, ' CURLOPT_HTTPHEADER, array( "X-API-KEY: YOUR_API_KEY", "Content-Type: multipart/form-data",));curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_POST, true);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_POSTFIELDS, array('sync' => 0, 'image_url' => "YOUR_IMG_URL"));$response = curl_exec($curl);$result = curl_errno($curl) ? curl_error($curl) : $response;curl_close($curl);$result = json_decode($result, true);if ( !isset($result["status"]) || $result["status"] != 200 ) { // request failed, log the details var_dump($result); die("post request failed");}// var_dump($result);$task_id = $result["data"]["task_id"];//get the task result// 1、"The polling interval is set to 1 second."//2 "The polling time is around 30 seconds."for ($i = 1; $i 30; $i++) { if ($i != 1) { sleep(1); } $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, " curl_setopt($curl, CURLOPT_HTTPHEADER, array( "X-API-KEY: YOUR_API_KEY", )); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); $result = curl_errno($curl) ? curl_error($curl) : $response; curl_close($curl); var_dump($result); $result = json_decode($result, true); if ( !isset($result["status"]) || $result["status"] != 200 ) { // Task exception, logging the error. //You can choose to continue the loop with 'continue' or break the loop with 'break' var_dump($result); continue; } if ( $result["data"]["state"] == 1 ) { // task success var_dump($result["data"]["image"]); break; } else if ( $result["data"]["state"] 0) { // request failed, log the details var_dump($result); break; } else { // Task processing if ($i == 30) { //Task processing, abnormal situation, seeking assistance from customer service of picwish } }}public static void main(String[] args) throws Exception { String taskId = createTask(); String result = pollingTaskResult(taskId, 0); System.out.println(result);}private static String createTask() throws Exception { OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("image_url", "IMAGE_HTTP_URL") .addFormDataPart("sync", "0") .build(); Request request = new Request.Builder() .url(" .addHeader("X-API-KEY", "YOUR_API_KEY") .post(requestBody) .build(); Response response = okHttpClient.newCall(request).execute(); JSONObject jsonObject = new JSONObject(response.body().string()); int status = jsonObject.optInt("status"); if (status != 200) { throw new Exception(jsonObject.optString("message")); } return jsonObject.getJSONObject("data").optString("task_id");}private static String pollingTaskResult(String taskId, int pollingTime) throws Exception { if (pollingTime >= 30) throw new IllegalStateException("Polling result timeout."); OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); Request taskRequest = new Request.Builder() .url(" + taskId) .addHeader("X-API-KEY", "YOUR_API_KEY") .get() .build(); Response taskResponse = okHttpClient.newCall(taskRequest).execute(); JSONObject jsonObject = new JSONObject(taskResponse.body().string()); int state = jsonObject.getJSONObject("data").optInt("state"); if (state 0) { // Error. throw new Exception(jsonObject.optString("message")); } if (state == 1) { // Success and get result. return jsonObject.getJSONObject("data").toString(); } Thread.sleep(1000); return pollingTaskResult(taskId, ++pollingTime);}const request = require("request");const fs = require("fs");const path = require('path')const API_KEY = "YOUR_API_KEY";(async function main() { const taskId = await createTask() const result = await polling(() => getTaskResult(taskId)) console.log(`result: ${JSON.stringify(result, null, 2)}`)})()const polling = async (fn, delay = 1 * 1000, timeout = 30 * 1000) => { if (!fn) { throw new Error('fn is required') } try
2025-04-14`json:"task_id"` Image string `json:"image"` ReturnType uint `json:"return_type"` Type string `json:"type"` Progress uint `json:"progress"` //不确定有没有,需要查询看看 State int `json:"state"` TimeElapsed float64 `json:"time_elapsed"` } `json:"data"`}func main() { // JSON data is passed and received here, and code modification is required. jsonData := `{ "status": 200, "message": "Success", "data": { "task_id": "123456", "image": "image_data", } }` // Parse JSON data into VisualScaleResponse struct var response VisualScaleResponse err := json.Unmarshal([]byte(jsonData), &response) if err != nil { fmt.Println("Error parsing JSON:", err) return } // Query the relevant content in the database based on the taskID and associate it with the image below. fmt.Println("Image:", response.Data.TaskId) // Print the 'image' field fmt.Println("Image:", response.Data.Image)} #Create a taskcurl -k ' \-H 'X-API-KEY: YOUR_API_KEY' \-F 'sync=0' \-F 'image_file=@/path/to/image.jpg'#Get the cutout result#Polling requests using the following methods 1. The polling interval is set to 1 second, 2. The polling time does not exceed 30 secondscurl -k ' \-H 'X-API-KEY: YOUR_API_KEY' \php//Create a task$curl = curl_init();curl_setopt($curl, CURLOPT_URL, ' CURLOPT_HTTPHEADER, array( "X-API-KEY: YOUR_API_KEY", "Content-Type: multipart/form-data",));curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_POST, true);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($curl, CURLOPT_POSTFIELDS, array('sync' => 0, 'image_file' => new CURLFILE("/path/to/image.jpg")));$response = curl_exec($curl);$result = curl_errno($curl) ? curl_error($curl) : $response;curl_close($curl);$result = json_decode($result, true);if ( !isset($result["status"]) || $result["status"] != 200 ) { // request failed, log the details var_dump($result); die("post request failed");}// var_dump($result);$task_id = $result["data"]["task_id"];//get the task result// 1、"The polling interval is set to 1 second."//2 "The polling time is around 30 seconds."for ($i = 1; $i 30; $i++) { if ($i != 1) { sleep(1); } $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, " curl_setopt($curl, CURLOPT_HTTPHEADER, array( "X-API-KEY: YOUR_API_KEY", )); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); $result = curl_errno($curl) ? curl_error($curl) : $response; curl_close($curl); var_dump($result); $result = json_decode($result, true); if ( !isset($result["status"]) || $result["status"] != 200 ) { // Task exception, logging the error. //You can choose to continue the loop with 'continue' or break the loop with 'break' var_dump($result); continue; } if ( $result["data"]["state"] == 1 ) { // task success var_dump($result["data"]["image"]); break; } else if ( $result["data"]["state"] 0) { // request failed, log the details var_dump($result); break; } else { // Task processing if ($i == 30) { //Task processing, abnormal situation, seeking assistance from customer service of picwish } }}public static void main(String[] args) throws Exception { String taskId = createTask(); String result = pollingTaskResult(taskId, 0); System.out.println(result);}private static String createTask() throws Exception { OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("image_file", JPG_FILE_NAME, RequestBody.create({JPG_FILE}, MediaType.parse("image/jpeg"))) .addFormDataPart("sync", "0") .build(); Request request = new Request.Builder() .url(" .addHeader("X-API-KEY", "YOUR_API_KEY") .post(requestBody) .build(); Response response = okHttpClient.newCall(request).execute(); JSONObject jsonObject = new JSONObject(response.body().string()); int status = jsonObject.optInt("status"); if (status != 200) { throw new Exception(jsonObject.optString("message")); } return jsonObject.getJSONObject("data").optString("task_id");}private static String pollingTaskResult(String taskId, int pollingTime) throws Exception { if (pollingTime >= 30) throw new IllegalStateException("Polling result timeout."); OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); Request taskRequest = new Request.Builder() .url(" + taskId) .addHeader("X-API-KEY", "YOUR_API_KEY") .get() .build(); Response taskResponse = okHttpClient.newCall(taskRequest).execute(); JSONObject jsonObject = new JSONObject(taskResponse.body().string()); int state = jsonObject.getJSONObject("data").optInt("state"); if (state 0) { // Error. throw new Exception(jsonObject.optString("message")); } if (state == 1) { // Success and get result.
2025-03-25Curl - Linux, Mac OS X, BSD Use of the API requires authentication with your API key. Your key is displayed in the right column in your dashboard. If you do not yet have an account, please register for a free account. The simple API makes it easy to requests and retrieve screenshots with curl. Browshot will send 302 redirections, so you need to use the -L option to follow them. To request a screenshot of the website with the default option, and save the image to /tmp/mobilito.png, use: $ curl -L " -o /tmp/mobilito.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 188k 100 188k 0 0 5692 0 0:00:33 0:00:33 --:--:-- 118k$ file /tmp/mobilito.png/tmp/mobilito.png: PNG image data, 1024 x 768, 8-bit/color RGB, non-interlaced You can use any of the options listed on the API page to get thumbnails of different sizes, to use different browsers, etc. Here are some common use cases: Full page By default, the screenshot of the screen is taken. To take a screenshot of the full page, add size=page: $ curl -L " -o /tmp/mobilito.png Thumbnail To have a thumbnail with a width of 640 pixels, same as ratio as the original browser, add the parameter width=640 to the URL: $ curl -L " -o /tmp/mobilito.png You can also choose to specify both the width and height for the thumbnail: $ curl -L " -o /tmp/mobilito.png Choose a virtual browser Browshot offers a large choice of Mobile browsers (iPhone, iPad, Android, etc.) and Desktop resolutions (60x480 to 1920x1200). You can pick the browser to use for the screenshots from you dashboard or you can get the list in a programmatic manner from the API. For example, to create a screenshot of from a virtual iPhone4 held vertically, pick the instance #22: $ curl -L " -o /tmp/mobilito.png Another way to pick up a virtual browser is to specify the screen resolution, for example screen=1024x768: $ curl -L " -o /tmp/mobilito.png All the options can be combined. You can get the full list on the API page.
2025-03-31Sending response to the web API method scriptExecutionTimeoutS (default: "50") - specifies CallXML script execution timeout, in seconds Other parameters into CallXML variables CURL example 1: curl -uadmin:admin --digest -X POST -d "@my_file.xml" -H "Content-Type: text/plain;charset=UTF-8" -H "Referer: CURL example 2: curl -uadmin:XYZ --digest -X POST --data-binary "@yyy.xml" -H "Content-Type:text/plain;charset=UTF-8" -H "Referer: content of the xml script file: SUBSCRIBE sip:[email protected]:5062 SIP/2.0Via: SIP/2.0/UDP x.x.x.x:5070;branch=z9hG4bK13054182From: blf_subscriber00001 ;tag=1641318497To: Call-ID: 0_2505407707_bogusCSeq: 1 SUBSCRIBEContact: Accept: application/reginfo+xmlMax-Forwards: 70User-Agent: Yealink SIP-T21P_E2 52.80.0.95Expires: 300Event: dialogContent-Length: 0]]> Example of calling web API in HTML using AJAX: Click-To-Call HTML button POST /API/MainViewModel/CreateCalls_Post - starts call generator specific to the API request, generates multiple outgoing calls using uploaded script. Returns Call-ID SIP header of the first created SIP call in JSON format: {'status': 'OK', 'sipCallId': 'the_new_call_id'}. URL query parameters are: maxCPS, intervalMs, intervalMsL, intervalMsH, maxConcurrentCalls, maxCallsToAttempt, callsPerTick. Other URL query parameters are passed into CallXML variables. The API method passes variable 'apiSequenceNumber' into the scripts, it means zero-based counter of executed scripts. CURL example: curl -uadmin:admin --digest -X POST -d "@my_file.xml" -H "Content-Type:text/plain;charset=UTF-8" GET /API/MainViewModel/CreateSingleCallCommand - creates an outgoing call using currently pre-configured script GET /API/MainViewModel/CurrentCallExists?callerId=XXX&calledId=YYY - checks existence of current call, returns 'true' or 'false' GET /API/MainViewModel/DestroyCall?[sipCallId=XXX][&calledId=YYYY][&calledIdSuffix=ZZZZ] - destroys current SIP call(s) with specified parameters: sipCallId - SIP Call-ID header of the destroyed call(s) calledId - CLD (B number) of the destroyed call(s) calledIdSuffix - CLD (B number) suffix of the destroyed call(s) - this parameter omits tech. prefix GET /DownloadRecordedFile?sipCallId=xxxx&fileId=mixed - downloads recorded WAV or PCAP file from a specific call Parameters: sipCallId - Call-ID header of the SIP call, used to identify the SIP call fileId (rx/tx/mixed) - type of recorded audio file. For audio wav files: "rx" - received RTP audio stream, "tx" - transmitted RTP audio stream, "mixed" - mix or received and transmitted RTP audio
2025-03-30