Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google QPX Express API returning HTTP error 403 : Forbidden - Python

import json
import requests
import urllib

url = "https://developers.google.com/qpx-express/v1/trips/search?key=<API_key>"
headers = {'content-type': 'application/json'}

params = {
  "request": {
    "slice": [
      {
        "kind": "qpxexpress#sliceInput",
        "origin": "BOS",
        "destination": "SFO",
        "date": "2017-06-30"
      }
    ],
    "passengers": {
      "kind": "qpxexpress#passengerCounts",
      "adultCount": 1,
    },
    "refundable": "false",
    "solutions": 20,
  }
}

#jsonreq = json.dumps(params)

data = urllib.parse.urlencode(params)
binary_data = data.encode('utf-8')
req = urllib.request.Request(url, binary_data)
flight = urllib.request.urlopen(req)
response = flight.read()
print(response)

I am trying to retrieve the flight fares but the Google API keeps giving me HTTP error 403: Forbidden.

I have checked my Developers console and the QPX Express API is enabled. Also, I have generated an API_key with no restrictions.

Here is the error:

HTTPError                                 Traceback (most recent call last)
<ipython-input-189-cc6dee70b145> in <module>()
     31 binary_data = data.encode('utf-8')
     32 req = urllib.request.Request(url, binary_data)
---> 33 flight = urllib.request.urlopen(req)
     34 response = flight.read()
     35 print(response)

C:\Anaconda3\lib\urllib\request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
    161     else:
    162         opener = _opener
--> 163     return opener.open(url, data, timeout)
    164 
    165 def install_opener(opener):

C:\Anaconda3\lib\urllib\request.py in open(self, fullurl, data, timeout)
    470         for processor in self.process_response.get(protocol, []):
    471             meth = getattr(processor, meth_name)
--> 472             response = meth(req, response)
    473 
    474         return response

C:\Anaconda3\lib\urllib\request.py in http_response(self, request, response)
    580         if not (200 <= code < 300):
    581             response = self.parent.error(
--> 582                 'http', request, response, code, msg, hdrs)
    583 
    584         return response

C:\Anaconda3\lib\urllib\request.py in error(self, proto, *args)
    508         if http_err:
    509             args = (dict, 'default', 'http_error_default') + orig_args
--> 510             return self._call_chain(*args)
    511 
    512 # XXX probably also want an abstract factory that knows when it makes

C:\Anaconda3\lib\urllib\request.py in _call_chain(self, chain, kind, meth_name, *args)
    442         for handler in handlers:
    443             func = getattr(handler, meth_name)
--> 444             result = func(*args)
    445             if result is not None:
    446                 return result

C:\Anaconda3\lib\urllib\request.py in http_error_default(self, req, fp, code, msg, hdrs)
    588 class HTTPDefaultErrorHandler(BaseHandler):
    589     def http_error_default(self, req, fp, code, msg, hdrs):
--> 590         raise HTTPError(req.full_url, code, msg, hdrs, fp)
    591 
    592 class HTTPRedirectHandler(BaseHandler):

HTTPError: HTTP Error 403: Forbidden
like image 268
Yashvardhan Nanavati Avatar asked May 31 '26 11:05

Yashvardhan Nanavati


1 Answers

Are you sure you are using the correct url? I originally had the same issue as you, but found that the code below works. I am also using requests, which makes passing the JSON more straightforward.

import requests
url='https://www.googleapis.com/qpxExpress/v1/trips/search?key=%s'%google_api_key

params = {"request": {
     "slice": [{"kind": "qpxexpress#sliceInput",
                "origin": "BOS",
                "destination": "SFO",
                "date": "2017-06-30"}],
     "passengers": {"kind": "qpxexpress#passengerCounts",
               "adultCount": 1,},
     "refundable": "false",
     "solutions": 20,}
    }

requests.post(url, json=params, headers = {'content-type': 'application/json'})
like image 183
Ger Avatar answered Jun 02 '26 01:06

Ger



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!