The Content-Type header is just used as info for your application. The browser doesn't care what it is. The browser just returns you the data from the AJAX call. If you want to parse it as JSON, you need to do that on your own.
The header is there so your app can detect what data was returned and how it should handle it. You need to look at the header, and if it's application/json then parse it as JSON.
This is actually how jQuery works. If you don't tell it what to do with the result, it uses the Content-Type to detect what to do with it.
The Content-Type header is just used as info for your application. The browser doesn't care what it is. The browser just returns you the data from the AJAX call. If you want to parse it as JSON, you need to do that on your own.
The header is there so your app can detect what data was returned and how it should handle it. You need to look at the header, and if it's application/json then parse it as JSON.
This is actually how jQuery works. If you don't tell it what to do with the result, it uses the Content-Type to detect what to do with it.
This is old but for me PHP8 it works if the charset is set example.
Copyheader('Content-Type: application/json; charset=utf-8');
echo json_encode(array('text' => 'eggs'));
Using Json string in the Http Header - Stack Overflow
REST API - Use the "Accept: application/json" HTTP Header - Stack Overflow
How to Use Headers When Reading JSON URL?
VaRest POST example
I can get you an example in 8 or 9 hours when I make it into work, so if no one has given you anything by then, expect it.
More on reddit.comVideos
Yes, you may use JSON in HTTP headers, given some limitations.
According to the HTTP spec, your header field-body may only contain visible ASCII characters, tab, and space.
Since many JSON encoders (e.g. json_encode in PHP) will encode invisible or non-ASCII characters (e.g. "é" becomes "\u00e9"), you often don't need to worry about this.
Check the docs for your particular encoder or test it, though, because JSON strings technically allow most any Unicode character. For example, in JavaScript JSON.stringify() does not escape multibyte Unicode, by default. However, you can easily modify it to do so, e.g.
Copyvar charsToEncode = /[\u007f-\uffff]/g;
function http_header_safe_json(v) {
return JSON.stringify(v).replace(charsToEncode,
function(c) {
return '\\u'+('000'+c.charCodeAt(0).toString(16)).slice(-4);
}
);
}
Source
Alternatively, you can do as @rocketspacer suggested and base64-encode the JSON before inserting it into the header field (e.g. how JWT does it). This makes the JSON unreadable (by humans) in the header, but ensures that it will conform to the spec.
Worth noting, the original ARPA spec (RFC 822) has a special description of this exact use case, and the spirit of this echoes in later specs such as RFC 7230:
Certain field-bodies of headers may be interpreted according to an internal syntax that some systems may wish to parse.
Also, RFC 822 and RFC 7230 explicitly give no length constraints:
HTTP does not place a predefined limit on the length of each header field or on the length of the header section as a whole, as described in Section 2.5.
Base64encode it before sending. Just like how JSON Web Token do it.
Here's a NodeJs Example:
Copyconst myJsonStr = JSON.stringify(myData);
const headerFriendlyStr = Buffer.from(myJsonStr, 'utf8').toString('base64');
res.addHeader('foo', headerFriendlyStr);
Decode it when you need reading:
Copyconst myBase64Str = req.headers['foo'];
const myJsonStr = Buffer.from(myBase64Str, 'base64').toString('utf8');
const myData = JSON.parse(myJsonStr);
You guessed right, HTTP Headers are not part of the URL.
And when you type a URL in the browser the request will be issued with standard headers. Anyway REST Apis are not meant to be consumed by typing the endpoint in the address bar of a browser.
The most common scenario is that your server consumes a third party REST Api.
To do so your server-side code forges a proper GET (/PUT/POST/DELETE) request pointing to a given endpoint (URL) setting (when needed, like your case) some headers and finally (maybe) sending some data (as typically occurrs in a POST request for example).
The code to forge the request, send it and finally get the response back depends on your server side language.
If you want to test a REST Api you may use curl tool from the command line.
curl makes a request and outputs the response to stdout (unless otherwise instructed).
In your case the test request would be issued like this:
$curl -H "Accept: application/json" 'http://localhost:8080/otp/routers/default/plan?fromPlace=52.5895,13.2836&toPlace=52.5461,13.3588&date=2017/04/04&time=12:00:00'
The H or --header directive sets a header and its value.
Here's a handy site to test out your headers. You can see your browser headers and also use cURL to reflect back whatever headers you send.
For example, you can validate the content negotiation like this.
This Accept header prefers plain text so returns in that format:-
$ curl -H "Accept: application/json;q=0.9,text/plain" http://gethttp.info/Accept
application/json;q=0.9,text/plain
Whereas this one prefers JSON and so returns in that format:-
$ curl -H "Accept: application/json,text/*;q=0.99" http://gethttp.info/Accept
{
"Accept": "application/json,text/*;q=0.99"
}
Hi all! Thanks in advance for any guidance. I'm trying to read a JSON url in Python. When I open the url in chrome, I can see the data, but when I read it in python, I get {'error': 'Unauthorized'}. When I open the url in Edge, I get the same error. I determined it was because I have to be logged in to the website through my gmail account, and then I can see the JSON data. When I inspect the site's Network, I see a request called Session that contains the following (I changed some of the personal details):
{
"user": {
"email": "ekraft@gmail.com",
"sub": "58edee6c-e210-4f2c-99a2-568efde67a6a",
"auth0_id": "google-oauth2|106222607358455934444",
"username": "ekraft"
}
"expires": "2023-12-07T20:21:51.686Z"
}Below is my current script. I googled more on it and it seems I have to work with these headers, but I'm not quite sure how to implement them. Any guidance is greatly appreciated!
import requests url = "https://www.otmnft.com/api/reignmakerspro/football/liveListings" response = requests.get(url) print(response.json())