How to get json text by request with header details? - python

I would like to go to page https://losoviny.iamroot.eu/part_one and write json text from there.
End at first I must login in https://losoviny.iamroot.eu/part_one_login and use
details in header.
But if If I run code I see:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Do you know how to rewrite it?
(Header data are correct)
Thank you
import json
import requests
headers = {
'username': 'Loskarlos',
'password': 'JednohoDneOvladnuKSI'
}
response = requests.post('https://losoviny.iamroot.eu/part_one_login', headers=headers)
response_get = requests.get('https://losoviny.iamroot.eu/part_one ')
response_get = json.loads(response_get.json())
print(response_get)

First you need to get the token from https://losoviny.iamroot.eu/part_one_login in order to test the API use postman. Your initial response is not a header element. It is a form, use below code to get the token.
import requests
url = "https://losoviny.iamroot.eu/part_one_login"
payload={'username': '<User NAME>',
'password': '<Password>'}
headers = {}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
After this I have no idea to pass the token header as per below code. Use header parameters when consuming the part_one endpoint. For header use Bearer format to build the Authorization header parameter.
import requests
url = "https://losoviny.iamroot.eu/part_one"
payload={}
headers = {
'Authorization': 'Bearer <TOKEN>'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
As a practice use postman like tool to navigate an API. cheers!!!

import requests
url = "https://losoviny.iamroot.eu/part_one_login"
payload={'username': 'Loskarlos',
'password': 'JednohoDneOvladnuKSI'}
headers = {}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

Related

Not getting response through request API

I am getting proper response from API when I am passing integer value directly but I am not getting any response when I am passing integer through variable.
​
# Extarct information of Metadata of Design id-5071431
import requests
url = "https://www.helioscope.com/api/designs/5071431"
payload={}
headers = {
'access_token': 'API_key',
}
​
response = requests.request("GET", url, headers=headers, data=payload)
# <Response [200]>
des=5071431
# Extarct information of Metadata of Design id-5071431
import requests
url = "https://www.helioscope.com/api/designs/{des}"
payload={}
headers = {
'access_token': 'API_key',
}
response = requests.request("GET", url, headers=headers, data=payload)
# <Response [500]>
Attached are the screenshots for the same
enter image description here
enter image description here
Thanks in advance
response.text will show the server response body
{des} should be replaced with an actual ID like you did in the first request
when I am passing integer through variable.
You're not using an f-string for loading any variables into the string, so it's taken as a literal. You could also just concatenate at the end

REST API post request results in successful request but not creation

I've been trying to make a Post Request to my CRM API. The CRM API is very vague:
"You can use POST request when you wish to create records. You POST a JSON encoded string to the servers and it will return a single instance of the record."
POST /{object_name}
Example:
Request URL (POST):
/accounts
Request Body (JSON):
{
"name": "testing API"
}
I've had plenty of success making GET requests regularly, but POST is not working out so easily.
url = "https://apiv4.reallysimplesystems.com/accounts?<KEY>"
payload = {"name":"Ziggy","owner":"XYZ","addresscounty/state":"Awe","source":"Space"}
headers = {
'Content-Type': 'application/json',
'Cookie': 'XSRF-TOKEN=<TOK>; really_simple_systems_session=<KEY>'
}
response = requests.post(url, headers=headers, data=payload)
I get a status code 200 when I run this, but I'm really looking for that 201. The only clue that I've got to follow at this point is that when I run:
response.json()
I get the error:
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
I've tried switching the response parameters to json:
response = requests.post(url, headers=headers, json=payload)
I've tried ensuring that my payload is json by using json.dumps():
payload = {"name":"Ziggy","owner":"XYZ","addresscounty/state":"Awe","source":"Space"}
payload = json.dumps(payload)
And I've tried all sorts of other shenanigans that I can't even recall at this point. Does anyone have any idea where I'm going wrong here? The 200 status code makes me feel painfully close.
Replace <AUTH_TOKEN> with your auth token
url = "https://apiv4.reallysimplesystems.com/accounts/"
payload = {"name":"Ziggy"}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <AUTH_TOKEN>',
}
response = requests.post(url, headers=headers, data=payload)
Problem solved:
import json
import requests
url = "https://apiv4.reallysimplesystems.com/accounts"
payload = {"name":"RSS Test Joe Bloggs","addresscounty/state":"Maryland","source":"Word of Mouth"}
payload = json.dumps(payload)
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <AUTH KEY>'
}
response = requests.post(url, headers=headers, data=payload)
Rather than using Postman's code which included the in the URL and used :
'Cookie': 'XSRF-TOKEN=<TOK>; really_simple_systems_session=<KEY>'
I replaced it with a standard Authorization header. Secondly, I found that using json.dumps(payload) and json = payload was resulting in a Bad Request.

API responds with Bad Request Error message

Could someone take a look at this code and let me know if there's something I'm doing wrong:
import requests
url = "https://api-end-point"
payload = {"grant_type": "client_credentials", "client_id":"my_ic", "client_secret": "not_now_please"}
headers = '{"accept": "application/json", "content-type": "application/json"}'
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
For some reason it's throwing error.
{"type":"http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html","title":"Bad Request","status":400,"detail":"JSON decoding error: Syntax error, malformed JSON"}
So first use json instead of data, second don't use ' around the headers, or actually you don't need to specify headers:
import requests
url = "https://api-end-point"
payload = {"grant_type": "client_credentials", "client_id":"my_ic", "client_secret": "not_now_please"}
response = requests.request("POST", url, json=payload)
print(response.text)
The page does not contain json/application but html/text. If you remove the headers then it works:
response = requests.request(method="POST", url=url, data=payload)
If you have special needs to specify in the headers add details to your question

Can't get a response in JSON format, python

I am trying to execute a get request to a service that can send responses in JSON or xml. In the header, I specify Content-Type 'application/json', but I get a response in xml format. I performed the same query using SOAP UI and received a JSON response.
Maybe something is wrong in my request?
import requests
myheader = {'Content-Type': 'application/json'}
auth = requests.get ("""myurl/authenticate""", auth=('user','password'),
headers = myheader)
url = 'myurl/service'
req = requests.get(url = url,
header = myheader,
cookies=auth.cookies)
print(req.json)
print(req.text)
Error text on 'print(req.json)':
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Problem solved by fixing header:
myheader={'Content-type': 'application/json', 'Accept': 'application/json'}

Python Requests Code 141 Error

I'm trying to use requests in python to post a json dictionary to a url. I need to get a string back from the url but I keep getting a code 141 error -{"code":141,"error":"Missing a github repository link"}. I'm using this website(http://docs.python-requests.org/en/latest/user/quickstart/) to do requests.
Any ideas on why I keep getting that error? Code is below.
import requests
import json
payload = { "email" : "jade#gmail.com", "github" : "https://github.com/"}
headers = {'content-type': 'application/json', "Accept": 'application/json'}
r = requests.post("http://challenge.code2040.org/api/register", params = payload, headers = headers)
print(r.url)
print r.text
Update: The suggestion worked but now I'm getting an{"code":141,"error":"success/error was not called"} error when I try to save the response I recieve from the url into a variable and then post it back to a different url.
#Store the token into a variable
token = r.text
payload = { "token" : token}
headers = {'content-type': 'application/json', "Accept": 'application/json'}
r = requests.post("http://challenge.code2040.org/api/getstring", json = payload, headers = headers)
print r.text
Since you are making a POST request and you need to provide a JSON in the request body, use json argument, not params:
r = requests.post("http://challenge.code2040.org/api/register",
json=payload,
headers=headers)
(tested - got back a token)
Note that json argument was introduced in requests 2.4.2.

Categories

Resources