1
0
mirror of https://github.com/pyro2927/SouthwestCheckin.git synced 2025-12-06 01:13:19 +00:00

Fixes #31, corrects openflights import

Also adding cli tests
This commit is contained in:
Joseph Pintozzi
2019-02-23 13:19:43 -08:00
parent 842099332d
commit 1fd06200c6
3 changed files with 395 additions and 9 deletions

View File

@@ -20,10 +20,9 @@ from dateutil.parser import parse
from docopt import docopt from docopt import docopt
from math import trunc from math import trunc
from pytz import utc from pytz import utc
from southwest import Reservation from southwest import Reservation, openflights
from threading import Thread from threading import Thread
from tzlocal import get_localzone from tzlocal import get_localzone
import openflights
import sys import sys
import time import time

View File

@@ -2,6 +2,7 @@ import json
import pytest import pytest
import requests import requests
import southwest import southwest
import checkin
from datetime import datetime, timedelta from datetime import datetime, timedelta
from .my_vcr import custom_vcr from .my_vcr import custom_vcr
from pytz import timezone, utc from pytz import timezone, utc
@@ -31,13 +32,14 @@ def test_checkin():
pytest.fail("Error checking in") pytest.fail("Error checking in")
def test_notifications():
phone = southwest.Notifications.Phone('1234567890')
email = southwest.Notifications.Email('test@example.com')
r.notifications = [phone, email]
# TODO: test firing these off
@my_vcr.use_cassette() @my_vcr.use_cassette()
def test_openflights_api(): def test_openflights_api():
assert southwest.timezone_for_airport('LAX').zone == "America/Los_Angeles" assert southwest.timezone_for_airport('LAX').zone == "America/Los_Angeles"
@my_vcr.use_cassette()
def test_cli():
try:
checkin.auto_checkin('XXXXXX', 'John', 'Smith')
except Exception:
pytest.fail("cli error")

385
tests/fixtures/cassettes/test_cli.yml vendored Normal file
View File

@@ -0,0 +1,385 @@
interactions:
- request:
body: iata=LAX&country=ALL&db=airports&iatafilter=true&action=SEARCH&offset=0
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Length: ['71']
Content-Type: [application/x-www-form-urlencoded]
User-Agent: [python-requests/2.21.0]
method: POST
uri: https://openflights.org/php/apsearch.php
response:
body: {string: '{"status": 1, "offset": 0, "max": "1", "airports": [{"name": "[REDACTED]",
"city": "Los Angeles", "country": "United States", "iata": "LAX", "icao":
"KLAX", "x": "-118.4079971", "y": "33.94250107", "elevation": "125", "apid":
"3484", "timezone": "-8", "dst": "A", "tz_id": "America/Los_Angeles", "type":
"airport", "source": "OurAirports", "ap_uid": null, "ap_name": "Los Angeles
International. (LAX), United States"}]}'}
headers:
Cache-Control: ['no-store, no-cache, must-revalidate, post-check=0, pre-check=0']
Connection: [Keep-Alive]
Content-Type: [text/html]
Date: ['Mon, 18 Feb 2019 07:24:50 GMT']
Expires: ['Thu, 19 Nov 1981 08:52:00 GMT']
Keep-Alive: ['timeout=5, max=100']
Pragma: [no-cache]
Server: [Apache/2.4.7 (Ubuntu)]
Set-Cookie: [PHPSESSID=mpoesla4lf9h12d3hnp5fn6t24; path=/]
Vary: [Accept-Encoding]
X-Powered-By: [PHP/5.5.9-1ubuntu4.26]
content-length: ['405']
status: {code: 200, message: OK}
- request:
body: null
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Type: [application/json]
Host: [mobile.southwest.com]
User-Agent: [python-requests/2.21.0]
X-API-Key: [l7xxb3dcccc4a5674bada48fc6fcf0946bc8]
X-User-Experience-Id: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
method: GET
uri: https://mobile.southwest.com/api/mobile-misc/v1/mobile-misc/page/view-reservation/XXXXXX
response:
body: {string: '{"viewReservationViewPage": {"dates": {"first": "2019-02-18",
"second": null}, "checkInIneligibilityReason": null, "destinationDescription":
"Los Angeles", "originAirport": {"name": "[REDACTED]", "state": "OR", "code":
"PDX", "country": null}, "destinationAirport": {"name": "[REDACTED]", "state":
"CA", "code": "LAX", "country": null}, "standbyFlight": null, "companion":
null, "passengers": "[REDACTED]", "confirmationNumber": "XXXXXX", "shouldShowAddEarlyBirdButton":
false, "bounds": [{"departureStatus": "ON TIME", "departureStatusType": "POSITIVE",
"arrivalStatus": "ON TIME", "arrivalStatusType": "POSITIVE", "flights": [{"number":
"1614", "wifiOnBoard": true}], "travelTime": "2h 20m", "departureDate": "2019-02-18",
"departureTime": "13:45", "departureAirport": {"name": "[REDACTED]", "state":
"OR", "code": "PDX", "country": null}, "arrivalTime": "16:05", "arrivalAirport":
{"name": "[REDACTED]", "state": "CA", "code": "LAX", "country": null}, "passengerTypeCounts":
{"adult": 1, "senior": 0}, "fareType": "Companion", "boundType": "DEPARTING",
"standbyFlight": null, "stops": [], "isNextDayArrival": false}], "pageHeader":
"PDX - LAX", "shareDetails": {"subject": "Southwest Flight 1614 Portland to
Los Angeles", "confirmationInfo": "Confirmation #: XXXXXX", "passengerInfo":
"[REDACTED]", "flightInfo": [{"header": "Departing Flight: Mon, Feb 18, 2019",
"flightInfo": "Flight #: 1614", "departureInfo": "Departs: 01:45 PM PDX",
"stops": null, "arrivalInfo": "Arrives: 04:05 PM LAX", "travelTime": "Travel
time: 2hr 20 mins"}]}, "hasAnyCancelledFlights": false, "isCheckInEligible":
true, "isCheckedIn": true, "isInternational": false, "isDynamicWaiver": false,
"isNonRevPnr": false, "_v1_infoNeededToChange": {"href": "/v1/mobile/reservations/record-locator/XXXXXX",
"method": "GET", "query": {"action": "CHANGE", "first-name": "[REDACTED]",
"last-name": "[REDACTED]"}}, "_v1_infoNeededToCancel": {"href": "/v1/mobile/reservations/record-locator/XXXXXX",
"method": "GET", "query": {"action": "CANCEL", "first-name": "[REDACTED]",
"last-name": "[REDACTED]"}}, "_v1_infoNeededToAddCompanion": null, "_links":
{"checkInSessionToken": "[REDACTED]", "earlyBird": null, "change": {"href":
"/v1/mobile-air-booking/page/flights/change/current/XXXXXX", "method": "GET",
"query": {"first-name": "[REDACTED]", "last-name": "[REDACTED]"}}, "cancel":
{"href": "/v1/mobile-air-booking/page/cancel-reservation/XXXXXX", "method":
"GET", "query": {"first-name": "[REDACTED]", "last-name": "[REDACTED]"}},
"viewStandbyList": null, "checkIn": null, "viewBoardingPass": {"href": "/v1/mobile-air-operations/page/check-in/view-boarding-pass",
"method": "POST", "body": {"firstName": "[REDACTED]", "lastName": "[REDACTED]",
"recordLocator": "[REDACTED]"}}, "viewBoardingPositions": null, "addCompanion":
null, "passportEmergencyContacts": null}, "hasUnaccompaniedMinor": false}}'}
headers:
Access-Control-Allow-Credentials: ['true']
Access-Control-Allow-Headers: ['origin, content-type, accept, authorization,
token, User-Agent, X-Forwarded-For, X-User-Experience-ID, X-Request-ID,
X-API-Key, X-Account-Number, X-Swa-Region, X-Channel-Id, X-Api-IDToken,
true-host']
Access-Control-Allow-Methods: ['GET, POST, PUT, DELETE, OPTIONS, HEAD']
Access-Control-Allow-Origin: ['']
Access-Control-Expose-Headers: ['X-User-Experience-ID, X-Request-ID']
Access-Control-Max-Age: ['1']
Cache-Control: ['max-age=0, no-cache, no-store']
Connection: [keep-alive]
Content-Type: [application/json]
Date: ['Mon, 18 Feb 2019 07:24:47 GMT']
Expires: ['Mon, 18 Feb 2019 07:24:47 GMT']
Pragma: [no-cache]
Server: [Apache-Coyote/1.1]
Strict-Transport-Security: [max-age=60]
Vary: [Accept-Encoding]
X-Request-ID: [6JM3yBL0QIahYeZtLYc8QA]
X-User-Experience-ID: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
content-length: ['8422']
status: {code: 200, message: OK}
- request:
body: null
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Type: [application/json]
Host: [mobile.southwest.com]
User-Agent: [python-requests/2.21.0]
X-API-Key: [l7xxb3dcccc4a5674bada48fc6fcf0946bc8]
X-User-Experience-Id: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
method: GET
uri: https://mobile.southwest.com/api/mobile-air-operations/v1/mobile-air-operations/page/check-in/XXXXXX
response:
body: {string: '{"checkInSessionToken": "[REDACTED]", "checkInViewReservationPage":
{"pnr": {"confirmationNumber": "XXXXXX", "passengers": "[REDACTED]"}, "cards":
[{"dates": {"first": "2019-02-18", "second": null}, "destinationDescription":
"Los Angeles", "departureDate": "2019-02-18", "departureAirport": "PDX", "departureTime":
"13:45", "arrivalAirport": "LAX", "arrivalTime": "16:05", "hazmatCheckInDisclaimer":
"By tapping ''Check in'' you acknowledge that you understand the hazardous
materials restrictions and penalties.", "flights": [{"flightNumber": "1614",
"hasWifi": true, "originAirportCode": "PDX", "destinationAirportCode": "LAX",
"destinationStationName": "Los Angeles", "departureDate": "Feb 18", "departureGate":
null, "departureTime": "13:45"}], "travelTime": "2h 20m"}], "hazmatText":
"Federal law forbids the carriage of hazardous materials such as aerosols,
fireworks, lithium batteries and flammable liquids aboard the aircraft in
your checked or carryon baggage. E-cigarettes are not permitted in checked
baggage and must be transported in carryon baggage only.", "_v1_infoNeededToCheckin":
{"href": "/v1/mobile/reservations/record-locator/XXXXXX/boarding-passes",
"method": "POST", "body": {"names": [{"firstName": "[REDACTED]", "lastName":
"[REDACTED]"}]}}, "_links": {"checkIn": {"href": "/v1/mobile-air-operations/page/check-in",
"method": "POST", "body": {"recordLocator": "[REDACTED]", "checkInSessionToken":
"[REDACTED]", "firstName": "[REDACTED]", "lastName": "[REDACTED]"}}, "travelDocuments":
null}}, "prefillPassengerAPISDocuments": null}'}
headers:
Access-Control-Allow-Credentials: ['true']
Access-Control-Allow-Headers: ['origin, content-type, accept, authorization,
token, User-Agent, X-Forwarded-For, X-User-Experience-ID, X-Request-ID,
X-API-Key, X-Account-Number, X-Swa-Region, X-Channel-Id, X-Api-IDToken,
true-host']
Access-Control-Allow-Methods: ['GET, POST, PUT, DELETE, OPTIONS, HEAD']
Access-Control-Allow-Origin: ['']
Access-Control-Expose-Headers: ['X-User-Experience-ID, X-Request-ID']
Access-Control-Max-Age: ['1']
Cache-Control: ['max-age=0, no-cache, no-store']
Connection: [keep-alive]
Content-Type: [application/json]
Date: ['Mon, 18 Feb 2019 07:24:48 GMT']
Expires: ['Mon, 18 Feb 2019 07:24:48 GMT']
Pragma: [no-cache]
Server: [Apache-Coyote/1.1]
Strict-Transport-Security: [max-age=60]
Vary: [Accept-Encoding]
X-Request-ID: [QZCIaesZQnuKkmmy37tLrg]
X-User-Experience-ID: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
content-length: ['13088']
status: {code: 200, message: OK}
- request:
body: '{}'
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Length: ['5921']
Content-Type: [application/json]
Host: [mobile.southwest.com]
User-Agent: [python-requests/2.21.0]
X-API-Key: [l7xxb3dcccc4a5674bada48fc6fcf0946bc8]
X-User-Experience-Id: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
method: POST
uri: https://mobile.southwest.com/api/mobile-air-operations/v1/mobile-air-operations/page/check-in
response:
body: {string: '{"checkInConfirmationPage": {"messages": null, "flights": [{"boundIndex":
0, "departureTime": "13:45", "gate": null, "passengers": "[REDACTED]", "flightNumber":
"1614", "hasWifi": true, "travelTime": "2h 20m"}], "_v1_infoNeededToViewBoardingPasses":
{"href": "/v1/mobile/record-locator/XXXXXX/mobile-boarding-passes", "method":
"GET", "query": {"first-name": "[REDACTED]", "last-name": "[REDACTED]"}},
"_links": {"boardingPasses": {"href": "/v1/mobile-air-operations/page/check-in/view-boarding-pass",
"method": "POST", "body": {"recordLocator": "[REDACTED]", "firstName": "[REDACTED]",
"lastName": "[REDACTED]", "checkInSessionToken": "[REDACTED]", "travelerID":
"2005DBDA00087702"}}, "viewBoardingPassIssuance": {"href": "/v1/mobile-air-operations/page/check-in/mobile-issuance/XXXXXX",
"method": "POST", "body": {"passengers": "[REDACTED]"}}}}}'}
headers:
Access-Control-Allow-Credentials: ['true']
Access-Control-Allow-Headers: ['origin, content-type, accept, authorization,
token, User-Agent, X-Forwarded-For, X-User-Experience-ID, X-Request-ID,
X-API-Key, X-Account-Number, X-Swa-Region, X-Channel-Id, X-Api-IDToken,
true-host']
Access-Control-Allow-Methods: ['GET, POST, PUT, DELETE, OPTIONS, HEAD']
Access-Control-Allow-Origin: ['']
Access-Control-Expose-Headers: ['X-User-Experience-ID, X-Request-ID']
Access-Control-Max-Age: ['1']
Cache-Control: ['max-age=0, no-cache, no-store']
Connection: [keep-alive]
Content-Type: [application/json]
Date: ['Mon, 18 Feb 2019 07:24:48 GMT']
Expires: ['Mon, 18 Feb 2019 07:24:48 GMT']
Pragma: [no-cache]
Server: [Apache-Coyote/1.1]
Strict-Transport-Security: [max-age=60]
Vary: [Accept-Encoding]
X-Request-ID: [YKbshcq_RJ2cCrd0FRsctQ]
X-User-Experience-ID: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
content-length: ['12674']
status: {code: 200, message: OK}
- request:
body: '{}'
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Length: ['6009']
Content-Type: [application/json]
Host: [mobile.southwest.com]
User-Agent: [python-requests/2.21.0]
X-API-Key: [l7xxb3dcccc4a5674bada48fc6fcf0946bc8]
X-User-Experience-Id: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
method: POST
uri: https://mobile.southwest.com/api/mobile-air-operations/v1/mobile-air-operations/page/check-in
response:
body: {string: '{"checkInConfirmationPage": {"messages": null, "flights": [{"boundIndex":
0, "departureTime": "13:45", "gate": "C15", "passengers": "[REDACTED]", "flightNumber":
"1614", "hasWifi": true, "travelTime": "2h 20m"}], "_v1_infoNeededToViewBoardingPasses":
{"href": "/v1/mobile/record-locator/XXXXXX/mobile-boarding-passes", "method":
"GET", "query": {"first-name": "[REDACTED]", "last-name": "[REDACTED]"}},
"_links": {"boardingPasses": {"href": "/v1/mobile-air-operations/page/check-in/view-boarding-pass",
"method": "POST", "body": {"recordLocator": "[REDACTED]", "firstName": "[REDACTED]",
"lastName": "[REDACTED]", "checkInSessionToken": "[REDACTED]", "travelerID":
"2005DBDA00087702"}}, "viewBoardingPassIssuance": {"href": "/v1/mobile-air-operations/page/check-in/mobile-issuance/XXXXXX",
"method": "POST", "body": {"passengers": "[REDACTED]"}}}}}'}
headers:
Access-Control-Allow-Credentials: ['true']
Access-Control-Allow-Headers: ['origin, content-type, accept, authorization,
token, User-Agent, X-Forwarded-For, X-User-Experience-ID, X-Request-ID,
X-API-Key, X-Account-Number, X-Swa-Region, X-Channel-Id, X-Api-IDToken,
true-host']
Access-Control-Allow-Methods: ['GET, POST, PUT, DELETE, OPTIONS, HEAD']
Access-Control-Allow-Origin: ['']
Access-Control-Expose-Headers: ['X-User-Experience-ID, X-Request-ID']
Access-Control-Max-Age: ['1']
Cache-Control: ['max-age=0, no-cache, no-store']
Connection: [keep-alive]
Content-Type: [application/json]
Date: ['Mon, 18 Feb 2019 18:10:17 GMT']
Expires: ['Mon, 18 Feb 2019 18:10:17 GMT']
Pragma: [no-cache]
Server: [Apache-Coyote/1.1]
Strict-Transport-Security: [max-age=60]
Vary: [Accept-Encoding]
X-Request-ID: [nqkkq63YTjK32ta1sWMlCA]
X-User-Experience-ID: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
content-length: ['12851']
status: {code: 200, message: OK}
- request:
body: '{"travelerID": "2005DBDA00087702"}'
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Length: ['6043']
Content-Type: [application/json]
Host: [mobile.southwest.com]
User-Agent: [python-requests/2.21.0]
X-API-Key: [l7xxb3dcccc4a5674bada48fc6fcf0946bc8]
X-User-Experience-Id: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
method: POST
uri: https://mobile.southwest.com/api/mobile-air-operations/v1/mobile-air-operations/page/check-in/view-boarding-pass
response:
body: {string: '{"checkInViewBoardingPassPage": {"messages": null, "mobileBoardingPassURLs":
["https://mbp.southwest.com/mobiqa/wap/3e422f2/kSqHRGJvSGA/"], "mobileBoardingPassTabs":
[{"title": "PDX - LAX", "departureDate": "Feb 18", "destinationDescription":
"Los Angeles"}], "destinationDescription": "Los Angeles", "originAirportCode":
"PDX", "destinationAirportCode": "LAX", "dates": {"first": "2019-02-18", "second":
null}, "_v1_infoNeededForSharingBoardingPass": {"href": "/v1/mobile/record-locator/XXXXXX/operation-infos/mobile-boarding-pass/notifications",
"method": "POST", "body": {"firstName": "[REDACTED]", "lastName": "[REDACTED]"}},
"_links": {"href": "/v1/mobile-air-operations/feature/check-in/send-boarding-pass",
"method": "POST", "body": {"recordLocator": "[REDACTED]", "checkInSessionToken":
"[REDACTED]", "travelerID": "2005DBDA00087702"}}}}'}
headers:
Access-Control-Allow-Credentials: ['true']
Access-Control-Allow-Headers: ['origin, content-type, accept, authorization,
token, User-Agent, X-Forwarded-For, X-User-Experience-ID, X-Request-ID,
X-API-Key, X-Account-Number, X-Swa-Region, X-Channel-Id, X-Api-IDToken,
true-host']
Access-Control-Allow-Methods: ['GET, POST, PUT, DELETE, OPTIONS, HEAD']
Access-Control-Allow-Origin: ['']
Access-Control-Expose-Headers: ['X-User-Experience-ID, X-Request-ID']
Access-Control-Max-Age: ['1']
Cache-Control: ['max-age=0, no-cache, no-store']
Connection: [keep-alive]
Content-Type: [application/json]
Date: ['Mon, 18 Feb 2019 18:10:18 GMT']
Expires: ['Mon, 18 Feb 2019 18:10:18 GMT']
Pragma: [no-cache]
Server: [Apache-Coyote/1.1]
Strict-Transport-Security: [max-age=60]
Vary: [Accept-Encoding]
X-Request-ID: [BPQyXOwiS2C7PQd72_9rjQ]
X-User-Experience-ID: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
content-length: ['3927']
status: {code: 200, message: OK}
- request:
body: '{"travelerID": "2005DBDA00087702", "recordLocator": "[REDACTED]", "checkInSessionToken": "[REDACTED]", "mediaType": "SMS", "phoneNumber": "1234567890"}'
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Length: ['160']
Content-Type: [application/json]
Host: [mobile.southwest.com]
User-Agent: [python-requests/2.21.0]
X-API-Key: [l7xxb3dcccc4a5674bada48fc6fcf0946bc8]
X-User-Experience-Id: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
method: POST
uri: https://mobile.southwest.com/api/mobile-air-operations/v1/mobile-air-operations/feature/check-in/send-boarding-pass
response:
body: {string: ''}
headers:
Access-Control-Allow-Credentials: ['true']
Access-Control-Allow-Headers: ['origin, content-type, accept, authorization,
token, User-Agent, X-Forwarded-For, X-User-Experience-ID, X-Request-ID,
X-API-Key, X-Account-Number, X-Swa-Region, X-Channel-Id, X-Api-IDToken,
true-host']
Access-Control-Allow-Methods: ['GET, POST, PUT, DELETE, OPTIONS, HEAD']
Access-Control-Allow-Origin: ['']
Access-Control-Expose-Headers: ['X-User-Experience-ID, X-Request-ID']
Access-Control-Max-Age: ['1']
Cache-Control: ['max-age=0, no-cache, no-store']
Connection: [keep-alive]
Content-Type: [application/json]
Date: ['Mon, 18 Feb 2019 18:10:18 GMT']
Expires: ['Mon, 18 Feb 2019 18:10:18 GMT']
Pragma: [no-cache]
Server: [Apache-Coyote/1.1]
Strict-Transport-Security: [max-age=60]
Vary: [Accept-Encoding]
X-Request-ID: [BPQyXOwiS2C7PQd72_9rjQ]
X-User-Experience-ID: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
content-length: ['0']
status: {code: 204, message: OK}
- request:
body: '{"travelerID": "2005DBDA00087702", "recordLocator": "[REDACTED]", "checkInSessionToken": "[REDACTED]", "mediaType": "EMAIL", "phoneNumber": "test@example.com"}'
headers:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
Content-Length: ['160']
Content-Type: [application/json]
Host: [mobile.southwest.com]
User-Agent: [python-requests/2.21.0]
X-API-Key: [l7xxb3dcccc4a5674bada48fc6fcf0946bc8]
X-User-Experience-Id: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
method: POST
uri: https://mobile.southwest.com/api/mobile-air-operations/v1/mobile-air-operations/feature/check-in/send-boarding-pass
response:
body: {string: ''}
headers:
Access-Control-Allow-Credentials: ['true']
Access-Control-Allow-Headers: ['origin, content-type, accept, authorization,
token, User-Agent, X-Forwarded-For, X-User-Experience-ID, X-Request-ID,
X-API-Key, X-Account-Number, X-Swa-Region, X-Channel-Id, X-Api-IDToken,
true-host']
Access-Control-Allow-Methods: ['GET, POST, PUT, DELETE, OPTIONS, HEAD']
Access-Control-Allow-Origin: ['']
Access-Control-Expose-Headers: ['X-User-Experience-ID, X-Request-ID']
Access-Control-Max-Age: ['1']
Cache-Control: ['max-age=0, no-cache, no-store']
Connection: [keep-alive]
Content-Type: [application/json]
Date: ['Mon, 18 Feb 2019 18:10:18 GMT']
Expires: ['Mon, 18 Feb 2019 18:10:18 GMT']
Pragma: [no-cache]
Server: [Apache-Coyote/1.1]
Strict-Transport-Security: [max-age=60]
Vary: [Accept-Encoding]
X-Request-ID: [BPQyXOwiS2C7PQd72_9rjQ]
X-User-Experience-ID: [AAAA3198-4545-46F4-9A05-BB3E868BEFF5]
content-length: ['0']
status: {code: 204, message: OK}
version: 1