Issue with fetching data from a web api - javascript

So I started watching a tutorial on how to fetch data from a web api, and the first line of code that the instructor writes is this.
fetch('https://www.metaweather.com/api/location/2487956/')
He then explains that you can't fetch data from a website that isn't yours because of the same origin policy and uses a workaround which is using the crossorigin.me site. It works for him in the video, but doesn't work for me and it always gives me this error:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.metaweather.com/api/location/2487956/. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing)
I've been looking for over an hour and I couldn't find a single solution. I'd really appreciate it if someone could help me out.

Or u can use a cors plugin for chrome and use it

From your question, using fetch() means that you are using either javascript or one of it's frameworks, if I may ask, which method are you using as your request method: POST or GET?

Related

CORS error when using shopify admin api in front end

I have shopify admin api and I want to call it in the front end but when i try to fetch the data it gives me the following error "Access to XMLHttpRequest at 'https://API_KEY:PASSORD#NAME.myshopify.com/admin/api/2021-07/orders.json' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.", I use axios and fetch and both did not work.
any help well be appreciated.
Great question! It's one that I have encountered as well. Shopify purposely blocks CORS requests. In order to make requests to your backend you will need to setup a Shopify APP Proxy for your front-end to communicate with.
Essentially what this does, is it permits your front-end to make requests to app/api/v1/orders_endpoint which Shopify will then route to https://yourapp.com/api/v1/orders_endpoints.
Check out the Shopify documentation for more information. The code to verify the signature is in Ruby, but some quick google foo turns up results in Javascript as well, see this stack overlow post.

Cross-Origin Read Blocking (CORB) blocked cross-origin response

I am not getting response of api call using angular 4 service but same call working in browser i am facing below given error - Cross-Origin Read Blocking (CORB) blocked cross-origin response
I was having similar challenging in getting response as well. With mine, I was actually making an http get request with respect to Google OpenID Connect but maybe your use case might be different.
So this is how I fixed it. Upon sending an authentication request to Google, I used a wrong base URL though it was working alright in the browser. I changed the base url rather to https://accounts.google.com/.well-known/openid-configuration in my Angular 8 service layer. Maybe you can check it out.
Hope it helps :)

Python REST API localhost CORS issues

I'm working on an assignment which needs a python backend and react.js frontend. While both of those parts are working fine individually, I am having some problems dealing with the interaction between the two.
I am using a flask based python REST API for the backend. When the API is hosted on pythonanywhere it works with the frontend perfectly. The problem is that the implementation should be able to be run locally and offline. I tried running the API on localhost:5000 and the front end is running via npm localhost:3000. When I try to access the API this way I get the error: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/api/list/all. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘True’).
I had a similar problem for the hosted version, but using Simple Requests fixed that. The same approach is not working here.
I would appreciate any advice you have.
Thanks in advance.
Edit: Found a solution. I used flasks jsonify method. It turns out the problem was that the data was text and this caused the CORS problem

CORS error with Javascript but not with Python/PHP

I'm writing a small script to access an external API for work. I originally did this in Python and everything worked fine.
I was then asked to try and do it in Javascript. Now, I'm no programmer really, but I do know (or believe) that Javascript is largely for client-side, whereas PHP or Python are really for server-side operations. When I wrote the script in Python I had no problems, but in Javascript I get a
Response to preflight request doesn't pass access control check: No
'Access-Control-Allow-Origin' header is present on the requested
resource.
error. From what I've read about CORS here and similar questions on Stack, that makes sense, but I don't really understand why I don't get a similar error in Python or PHP...
I'm fairly new to this so I'm probably missing a number of things, but I'd really appreciate any insight anyone can give me. If I've left out any important info, please let me know.
From Mozilla's documentation:
For security reasons, browsers restrict cross-origin HTTP requests initiated from within scripts. For example, XMLHttpRequest and Fetch follow the same-origin policy. So, a web application using XMLHttpRequest or Fetch could only make HTTP requests to its own domain.
Since Javascript in the browser uses XMLHttpRequest and fetch to make HTTP requests, they're subject to CORS policy enforcement.
More information on the reasons for CORS:
CORS is intended to allow resource hosts (any service that makes its data available via HTTP) to restrict which websites may access that data.
Example: You are hosting a website that shows traffic data and you are using AJAX requests on your website. If SOP and CORS were not there, any other website could show your traffic data by simply AJAXing to your endpoints; anyone could easily "steal" your data and thus your users and your money.
The external API you're using likely implemented a CORS policy intentionally. For example, if the API requires an application-level secret key for authentication, a CORS policy would discourage the use of that key in a public environment (namely the browser). Alternatively, the API may have a list of acceptable domain names for CORS that doesn't include the domain you're currently using.
Those are just a few examples; there could be any number of reasons for an API to implement CORS headers.

Is there a way around Access-Control-Allow-Origin?

I'm using an API from JIRA to get some information on bugs. Here's an example of the JQuery I'm using to get it:
var endpoint = 'https://jira.cyanogenmod.org/rest/api/latest/issue/CYAN-2631';
$.get(endpoint, function(data) {
do_stuff(data, data['fields']['project']['self']);
});
And, I'm getting the ever-terrible Access-Control-Allow-Origin error. It looks like this:
XMLHttpRequest cannot load
https://jira.cyanogenmod.org/rest/api/latest/issue/CYAN-2631.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://127.0.0.1:8000' is therefore not allowed access.
I'd really like to use this API if possible. Following the directions on this question didn't help. I got another error,
GET https://jira.cyanogenmod.org/rest/api/latest/issue/CYAN-2631callback=jQuery172039181585889309645_1431307158851?_=1431307165515
Seems to be a Jquery error, so I don't think that's the right approach. Maybe the server doesn't allow for jsonp.
Anyway, does anyone have a way around this or can I just not use this particular API? Thanks
There is no way to enable cross origin requests entirely from the browser without external code. If there was, it would entirely defeat the purpose of the security protections in the first place.
When using a browser, it is the server that decides if it wants to support cross origin requests or not and what domains it wants to support requests from. You cannot bypass it in the client.
The choices are:
Server enables CORs access from your domain or all domains.
Server supports JSONP allowing you to use it to work-around the cross origin access.
You create your own server proxy where you make a request from the browser to your own server (which would either be same origin or have CORS enabled), then your own server gets the data from the other site and returns it back to the browser. Servers are not limited by the same origin limitations as this is a security feature built into browsers only.
You find some third party proxy service that you can use to serve the same purpose as option #3.
FYI, a Google search turned up this article about enabling CORS on the API: https://answers.atlassian.com/questions/69356/cross-origin-resource-sharing-with-jira-rest-api-and-javascript. I don't understand enough about the service to quite follow the article, but maybe it points you in a helpful direction.
H-i, short answer is "yes".
The medium answer is "enable CORS on your application SERVER"
The long answer is here: http://enable-cors.org/
At some point you'll encounter the concept of a "pre-flight request", and you'll probably get confused.
That's because it's confusing, stupid, and poorly engineered. Just keep on going.
The easiest way to enable CORS is at your webserver (nginx or apache), although, you can enable it in the application itself.
The http://enable-cors.org/ site lists configurations for a variety of web servers and application stacks.
Good luck!

Categories

Resources