How to convert specific CURL request to Python - python

I have the following Curl request:
curl -v --location --request POST 'http://127.0.0.1:8080/abc' \--header 'Content-Type: application/json' \--data-raw '{data}'
I tried using pycurl and requests command.
Also tried to put headers but it was of no use.
My tried code:
requests = "curl -v --location"
a = "http://127.0.0.1:8080/abc"
headers = {'Content-Type': 'application/json'}
r = requests.post(url=a, headers= headers , params=data)

Is this works?
https://curl.trillworks.com/
import requests
headers = {
'Content-Type': 'application/json',
}
data = '{data}'
response = requests.post('http://127.0.0.1:8080/abc',
headers=headers,
data=data)

Related

CURL POST with Python

I am trying to POST a multipart/base64 xml file to portal using the following in python. How can i run it in Python?
curl -X POST -H 'Accept: application/xml' -H 'Content-Type: multipart/related; boundary=<boundary_value_that_you_have>; type=text/xml; start=<cXML_Invoice_content_id>' --data-binary #<filename>.xml https://<customer_name>.host.com/cxml/invoices
You can use this website
I got this code. Could you try it ?
import requests
headers = {
'Accept': 'application/xml',
'Content-Type': 'multipart/related; boundary=<boundary_value_that_you_have>; type=text/xml; start=<cXML_Invoice_content_id>',
}
data = open('filename.xml', 'rb').read()
response = requests.post('https://<customer_name>.host.com/cxml/invoices', headers=headers, data=data)

get 400 bad request after requesting GET in python

Id like to convert this curl command to python script
curl -v -H "Content-Type: application/json" -H "Authorization: Bearer MYTOKEN" https://www.zopim.com/api/v2/chats
I wrote the python script below but I get <Response [400]>and doesn't work.
import requests
url = "https://www.zopim.com/api/v2/chats"
access_token = "MYTOKEN"
response = requests.post(url,
headers={"Content-Type":"application/json;charset=UTF-8",
"Authorization": "Bearer {}".format(access_token)})
print(response)
Any advice will be appreciated.thanks.
You should be using requests.get instead of requests.post, since what you want is a GET request:
import requests
url = "https://www.zopim.com/api/v2/chats"
access_token = "MYTOKEN"
response = requests.get(url,
headers={"Content-Type":"application/json;charset=UTF-8",
"Authorization": "Bearer {}".format(access_token)})
print(response)

Working fine when hitting using Curl but Bad Request 400 when using python requests

import requests
import json
import numpy as np
payload = {'query':json.dumps({
"per_page":12,
"sort":None,
"scroll_id":None,
"session_id":None,
"q":"diapers",
"shingle_active":False,
"location":"110005",
"types":["allopathy","brand","sku","udp"],
"country":"",
"is_query_suggestion_applicable":False,
"debug":False,
"filters":None,
"source_fields":["count"],
"query_filters":None,
"is_all":True
})}
headers = {'Content-Type': 'application/json'}
url = 'https://kjhghfjdslsls'
r = requests.post(url, params=payload, headers=headers)
print(r.text)
This gives error :
{"errors":[{"message":"Parameter per_page is required"}],"is_success":false,"status_code":400}
Though when using the below curl request it is working fine & returning required output-->
curl --location --request POST 'http://khjfhdksl' \
--header 'Content-Type: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"sort":null,
"per_page":12,
"scroll_id":null,
"session_id":null,
"q":"diapers",
"shingle_active":false,
"location":"110005",
"types":["allopathy","brand","sku","udp"],
"country":"",
"is_query_suggestion_applicable":false,
"debug":false,
"filters":null,
"source_fields":["count"],
"query_filters":null,
"is_all":true
}'
You have a top-level key query in the payload for the python version. And you are passing the payload as params (query params)
Try removing that:
import requests
import json
import numpy as np
payload = json.dumps({
"per_page":12,
"sort":None,
"scroll_id":None,
"session_id":None,
"q":"diapers",
"shingle_active":False,
"location":"110005",
"types":["allopathy","brand","sku","udp"],
"country":"",
"is_query_suggestion_applicable":False,
"debug":False,
"filters":None,
"facets":[{"field":"sku.brand.raw","name":"brand","type":"facet","range":None},{"field":"product_form","name":"product_form","type":"facet","range":None},{"field":"rx_required","name":"rx_required","type":"facet","range":None},{"field":"uses","name":"uses","type":"facet","range":None},{"field":"age","name":"age","type":"facet","range":None},{"field":"recommended","name":"recommended","type":"facet","range":None}],
"source_fields":["count"],
"query_filters":None,
"is_all":True
})
headers = {'Content-Type': 'application/json'}
url = 'https://search-stag123api.example.com/search-new/search/v1/search/lambda'
r = requests.post(url, data=payload, headers=headers)
print(r.text)

Trouble converting curl commands to python requests

I'm trying to grab some data from a website using API, but I'm having trouble converting the example curl command to python requests.
example curl command
curl -X POST "some_url" \
-H "accept: application/json" \
-H "Authorization: <accesstoken>" \
-d #- <<BODY
{}
BODY
My python requests that didn't work
headers = {
'Authorization': "Bearer {0}".format(access_token)
}
response = requests.request('GET', "some_url",
headers=headers, allow_redirects=False)
I get error code 400, can anyone help me figure out what was wrong?
The equivalent requests code for your curl should be:
import requests
headers = {
'accept': 'application/json',
'Authorization': '<accesstoken>',
}
data = "{} "
response = requests.post('http://some_url', headers=headers, data=data)
You can use https://curl.trillworks.com/ to convert your actual curl invocation (note that it won't handle heredocs, as in your example).
If you see different behavior between curl and your python code, dump the HTTP requests and compare:
Python requests - print entire http request (raw)?
How can I see the request headers made by curl when sending a request to the server?

how to use curl with -u in python request

I am trying to convert a curl request to python request, but i have problem to convert -u .
curl -X POST \
-u "apikey:yourKey" \
--header "Content-Type: audio/wav" \
--data-binary "#path" \
"https://stream-fra.watsonplatform.net/speech-to-text/api/v1/recognize?model=de-DE_BroadbandModel
My solution:
import requests
data = "path"
url = 'https://stream-fra.watsonplatform.net/speech-to-text/api/v1/recognize?model=de-DE_BroadbandModel'
#payload = open("request.json")
headers = {'content-type': 'audio/wav', 'username': "apikey=yourkey" }
r = requests.post(url, headers=headers, data=data)
Edit:
import requests
data = "path"
url = 'https://stream-fra.watsonplatform.net/speech-to-text/api/v1/recognize?model=de-DE_BroadbandModel'
#payload = open("request.json")
headers = {'Content-Type': 'audio/wav'}
#r = requests.post(url, headers=headers, data=data)
print requests.post(url, verify=False, headers=headers, data=data, auth=('apikey', "key"))
now i get
Response [400]
(the curl cmd is working)
Try this
requests.post(url, headers=headers, data=data, auth=(apiKey, yourApiKey))
-u is short for --user which is used for server authentication see here, also look into Basic authentication for requests library.
Edit: You need to read the file (specified in --data-binary "#path") first before passing it in requests.post. I hope this link helps

Categories