I am trying to test the Sumo Logic API by updating the information of my collector. The second curl command is the one that is causing the issue 'curl: (55) Failed sending PUT request'. It works in my terminal but not in the bash script.
#!/bin/bash
readonly etag=$(curl -u '<accessId>:<accessKey>' -I -X GET https://api.sumologic.com/api/v1/collectors/<id> | grep -Fi etag | awk '{print $2}' | tr -d \''"\')
echo ${etag}
curl -vvv -u '<accessId>:<accessKey>' -X PUT -H "Content-Type: application/json" -H "If-Match: \"${etag}\"" -T updated_collector.json https://api.sumologic.com/api/v1/collectors/<id>
set -x
The first curl command is assigned to the variable called 'etag' which stores the necessary etag. The etag is used in the second curl command to make a request to update the information stored in the 'updated_collector.json'. The updated_collector.json file is not the issue as I have successfully updated the information via the terminal with it. I suspect the content-type is not being sent in the header because someone ran the script on their end and it was not showing that information with the -vvv tag.
Here you can find the Sumo Logic Collector API Methods and Examples from which I got the curl commands to test the API: https://help.sumologic.com/APIs/Collector-Management-API/Collector-API-Methods-and-Examples
Update: I retieved the etag and then ran the second command in a bash script. I manually inserted the etag into the ${etag} portion of the second curl command. I then ran the script and it worked. Therefore, the etag variable isn't correctly formatted inside the second curl command. I do not know how to fix this.
The issue was partially the syntax but after fixing that, I was still getting an error. "If-Match: \"${etag}\" in my command should be "If-Match: ${etag}" instead. I had to add the --http1.1 flag for it to work. I'm sure this is a sumo logic issue. I am able to execute GET requests no problem using http2.0.
I have simple shell script that uses curl to get a response from a remote URL. The issue is that I migrated the said URL to HTTPS and now curl return an empty string. It seems that setting CURLOPT_SSL_VERIFYHOST option should fix the issue but how do I set this option in a shell script? Any other options / workarounds?
#! /bin/bash
URL=$(curl -u user:pass -A "Mozilla" https://example.com/ddns/update.php)
Today, I happened to have the same issue. neither -k and --insecure nor -L worked, but then for some reason I mixed them and it worked.
I can't say why that happened, but this worked for me:
curl -kL https://...
PS: it was a Jupyter notebook server. my guess is that it uses both ssl and redirection.
I am using the following command to upload file to an endpoint
curl -X POST -H "authorization: Basic base64encode" -H "Content-Type:
multipart/form-data" -H "X-Atlassian-Token: nocheck" -F
"file=#c:/Users/User/Desktop/testresults.xml" https://jira.test-
server.ag/rest/api/latest/issue/man-287/attachments
the command under mac works without problems, under windows I become the following error
curl: (26) read function returned funny value
curl version
curl 7.64.0 (x86_64-w64-mingw32) libcurl/7.64.0 OpenSSL/1.1.1a
installed using https://chocolatey.org
I ran into the same problem when I used curl on the Windows Subsystem for Linux on Windows 10. I had to change the path from C:\Temp\File.txt to /mnt/c/Temp/File.txt.
Check if you can access the file in your shell e.g. with dir c:\path\to\file.txt and if it fails then you know that you have to fix the path first.
I'm trying to run a curl command from the command line in Windows, but for the life of me I can't figure out how I'm supposed to escape it.
I'm executing this:
C:\WINDOWS\system32>curl --anyauth --user user:password -X POST -d "{\"rest-api\":{\"name\":\"BizSimDebug3\"}}" -H "Content-type: application/xml" http://localhost:8002/v1/rest-apis
And I'm getting this:
<rapi:error xmlns:rapi="http://marklogic.com/rest-api">
<rapi:status-code>400</rapi:status-code>
<rapi:status>Bad Request</rapi:status>
<rapi:message-code>RESTAPI-INVALIDCONTENT</rapi:message-code>
<rapi:message>Your bootstrap payload caused the server to throw an error. Underlying error message: XDMP-DOCROOTTEXT: xdmp:get-request-body() -- Invalid root text "{"rest-api":{"name":"BizSimDebug3"}}" at line 1</rapi:message>
</rapi:error>
Is there something else I need to do to escape the inner quotes in the -d flag? Or am I overlooking the real issue entirely?
This works in Windows:
curl -i -X POST -H "Content-Type: application/json" -d "{\"Field1\": 123, \"Field2\": 456 }" "http://localhost:8080"
The XDMP-DOCROOTTEXT error indicates the server is trying to parse the payload as XML and failing.
The Content-Type header is telling the server that you're sending XML, but the payload is JSON.
Try changing the Content-Type header to application/json
Quoting is hell. By "Windows Command Line and your prompt I presume you mean cmd.com ?. That doest quote the same as linux shells.
For this simplistic experiment I recommend going for 2 kinds of quotes to avoid escaping But even then its unlikely to work
curl --anyauth --user user:password -X POST -d "{'rest-api':{'name':'BizSimDebug3'}}" -H "Content-type: application/xml" http://localhost:8002/v1/rest-apis
Better luck might be had by going with a unix-like shell such as running cygwin (http://www.cygwin.com/) or maybe xmlsh (www.xmlsh.org) which escape like linux does.
You really are going to have a nightmare running anything complex through the windows command line natively.
-David
Is there a way to install cURL in Windows in order to run cURL commands from the command prompt?
If you are not into Cygwin, you can use native Windows builds. Some are here: curl Download Wizard.
Update: Curl is now included in Windows, no need to run it via PowerShell.
First you need to download the cURL executable. For Windows 64bit, download it from here and for Windows 32bit download from here
After that, save the curl.exe file on your C: drive.
To use it, just open the command prompt and type in:
C:\curl http://someurl.com
If you have Git installed on windows you can use the GNU Bash.... it's built in.
https://superuser.com/questions/134685/run-curl-commands-from-windows-console/#483964
Update: Curl is now included in Windows, no need to run it via PowerShell.
Folks that don't literally need the curl executable, but rather just need to e.g. see or save the results of a GET request now and again, can use powershell directly. From a normal command prompt, type:
powershell -Command "(new-object net.webclient).DownloadString('http://example.com')"
which, while a bit wordy, is similar to typing
curl http://example.com/
in a more Unix-ish environment.
More information about net.webclient is available here: WebClient Methods (System.Net).
UPDATE: I like how ImranHafeez took this one step further in this answer. I'd prefer a simpler cmd-script however, maybe creating a curl.cmd file containing this:
#powershell -Command "(new-object net.webclient).DownloadString('%1')"
which could be called just like the Unix-ish example above:
curl http://example.com/
If you use the Chocolatey package manager, you can install cURL by running this command from the command line or from PowerShell:
choco install curl
With Windows 10 Insider build 17063 curl is available in the cmd and powershell since early 2018.
Create batch file in windows and enjoy with cURL in windows :)
#echo off
echo You are about to use windows cURL, Enter your url after curl command below:
set /p input="curl "
cls
echo %input%
powershell -Command "(new-object net.webclient).DownloadString('%input%')"
pause
Currently in Windows 10 build 17063 and later, cURL comes by default with windows. Then you don't need to download it and just use curl.exe.
Visit download page https://curl.haxx.se/download.html - it's incredible
Choose your sytem in list
Don't forget SSL support, it's obvious now, e.g. for https
Unpack curl.exe and .crt to C:\Windows\System32
Restart cmd
Enjoy > curl https://api.stackexchange.com
p.s. If you want another folder to store executable check your paths > echo %PATH%
it should work perfectly fine if you would download it from
--http://curl.haxx.se/dlwiz/?type=bin&os=Win64&flav=MinGW64 -- FOR 64BIT Win7/XP OR from http://curl.haxx.se/dlwiz/?type=bin&os=Win32&flav=-&ver=2000%2FXP --- FOR 32BIT Win7/XP just extract the files to c:/Windows and run it from cmd
C:\Users\WaQas>curl -v google.com
* About to connect() to google.com port 80 (#0)
* Trying 173.194.35.105...
* connected
* Connected to google.com (173.194.35.105) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.28.1
> Host: google.com
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 05 Feb 2013 00:50:57 GMT
< Expires: Thu, 07 Mar 2013 00:50:57 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< X-Cache: MISS from LHR-CacheMARA3
< X-Cache-Lookup: HIT from LHR-CacheMARA3:64003
< Connection: close
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
here.
</BODY></HTML>
* Closing connection #0
Install Git for windows
Then use git bash to run curl commands.
Install git command line from here. When you install git in windows you will automatically get curl with it. You can check the installed version of curl using curl --version like this.
This is a sample curl request which sends a string in a JSON object and get it encoded.
curl https://api.base62.io/encode \
--request POST \
--header "Content-Type: application/json" \
--data '{ "data": "Hello world!" }'
I was able to use this site to easily download and install curl on my Windows machine. It took all of 30 seconds. I'm using Windows 7 (w/ Admin privelages), so I downloaded curl-7.37.0-win64.msi from http://curl.haxx.se/download.html.
Also, don't forget to restart your console/terminal after you install curl, otherwise you will get the same error messages.
I have also found that if I put the cygwin bin on my windows path I can run curl from a windows command line. It also will give you access to things like ls and grep
Assuming you are new to the game or are unable to install software because of security restrictions, you could use Scoop to install curl. From a powershell or command window run the following commands. Note this assumes that you have Powershell v3.0+.
The other cool advantage here is that this installs the software for just the current user.
Set execution exception
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Install Scoop
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
Install curl. You may see a warning about a missing hash, but you should see a final message that cURL was installed successfully
scoop install curl
Test the install of curl
curl -L https://get.scoop.sh
From Windows Command Prompt, run curl through Git Bash
"C:\\Users\\sizu\\AppData\\Local\\Programs\\Git\\bin\\sh.exe" --login -i -c "curl https://www.google.com"
Go to curl Download Wizard
Select curl executable
Select Win32 or Win64
Then select package for it(Eg generic/cygwin) as per your requirement
Then you will have to select version. You can select unspecified.
This will directly take you to download link which on click will give you popup to download the zip file.
Extract the zip to get the executable. Add this folder in your environment variables and you are done. You can then execute curl command from cmd.
Download the .exe file from https://cygwin.com/install.html for cygwin (a large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows).
Run the .exe file.
While installing you will get in a step to select packages. In the select package window --> change the view to "Not installed" and search for curl. click on the necessary packages to install by clicking on the "new" column for the package --> you can see the version number and then click next. ( see the image attached below)
After finishing the installation click on the cygwin to open the curl console on windows and work on curl commands.
I am may be bit late for this, but I am able to resolve my issue of curl at cmd for windows 10.
I got help from below video tutorial https://www.youtube.com/watch?v=qlTVMuONazs
Here is some explanation
Step 1: go to https://curl.haxx.se/download.html
Step 2: Search "Win64 - Generic" and download "Win64 x86_64 7zip" by "Darren Owen"
Step 3: unzip the download file and install the certificate "ca-bundle.crt" do not touch curl.exe
Step 4: in windows go to "Control Panel" -> "System" -> "Advance system settings
"
Step 5: click on Envirnoment variables
Step 6: In System variable click on "Path" and paste the path of the file folder in my case it is "C:\curl\curl_7_53_1_openssl_nghttp2_x64"
And you are done.
Don't Forgot to restart you system for one time
Simplest answer:
(1) Download the curl binary here: https://curl.haxx.se/download.html (see the binary for your OS). Example:
(2) Create a folder "C:\curl" then unzip all there
(3) Edit the system variable called "Path" by adding ";C:\curl\bin" in the end. Finished.
Obs.: I've seen some guys telling to add ";C:\curl" but this way it's not possible to access curl.exe.
For anyone looking for a quick solution, after having standard installed cygwin but finding out curl did not work on a win 10 x64 platform:
Downloading this retired repository, extracting it and running:
git-cmd.bat
Worked like a charm. I assume it has the pre-installed option for curl.
I've used MobaXterm and it runs curl command properly.