redfern314 / southwest-search

Search, sort, and filter Southwest flights based on a number of parameters.
MIT License
13 stars 5 forks source link

No results even though 'success' #7

Open RayBB opened 3 years ago

RayBB commented 3 years ago

Hey there, thanks for making this awesome tool. I really could use something like this for some places where Southwest has planes flying between two locations that require a layover they don't make routes for (like HNL to LGA).

Anyway, when I search I get empty results:

python southwest.py -a SFO -d LAX -t 2021-06-19
'success'
flight    depart    depart    arrive    fares    route    num      duration
num       date      time      time                        stops
--------  --------  --------  --------  -------  -------  -------  ----------

Any ideas? I updated the request headers as mentioned in readme.

redfern314 commented 3 years ago

Hi @RayBB! It's entirely probable that SW has changed their private API, again. I'll take a look at some point but it's sadly hard to keep up. It might be easier to go back to a web-crawler interface instead of making raw HTTP requests...

As an aside, your use case is one that I hadn't considered. I'm surprised that they wouldn't "make a route" for that kind of trip.

RayBB commented 3 years ago

@redfern314

Maybe that don't make a route for a trip like that because of complications with checked bags or some other logistical challenge. I even messaged them about it and they said they can't book things like that for us over the phone either it would have to be done manually.

Maybe doing a js based thing in the browser will get more consistent results.

Once I got this working it was still intermittent and will work one time but not the next. When it does work it is fantastic though!

Here's what I found: stopsDetails is now nested under segments. Like this:

Spoiler ```json { "details": [ { "originationAirportCode": "LGA", "destinationAirportCode": "TPA", "departureTime": "14:30", "arrivalTime": "22:10", "nextDay": false, "totalDuration": 460, "flightNumbers": [ "431", "653" ], "filterTags": [ "NOON_TO_SIX", "AVAILABLE", "STOPS" ], "departureDateTime": "2021-06-22T14:30:00.000-04:00", "arrivalDateTime": "2021-06-22T22:10:00.000-04:00", "segments": [ { "originationAirportCode": "LGA", "destinationAirportCode": "HOU", "flightNumber": "431", "duration": "03:55", "numberOfStops": 0, "departureTime": "14:30", "arrivalTime": "17:25", "departureDateTime": "2021-06-22T14:30:00.000-04:00", "arrivalDateTime": "2021-06-22T17:25:00.000-05:00", "operatingCarrierCode": "WN", "marketingCarrierCode": "WN", "aircraftEquipmentType": "73W", "features": [ "WIFI" ], "wifiOnBoard": true, "stopsDetails": [ { "originationAirportCode": "LGA", "destinationAirportCode": "HOU", "flightNumber": "431", "legDuration": 235, "stopDuration": 100, "changePlanes": true, "departureTime": "14:30", "arrivalTime": "17:25", "departureDateTime": "2021-06-22T14:30:00.000-04:00", "arrivalDateTime": "2021-06-22T17:25:00.000-05:00" } ] }, { "originationAirportCode": "HOU", "destinationAirportCode": "TPA", "flightNumber": "653", "duration": "02:05", "numberOfStops": 0, "departureTime": "19:05", "arrivalTime": "22:10", "departureDateTime": "2021-06-22T19:05:00.000-05:00", "arrivalDateTime": "2021-06-22T22:10:00.000-04:00", "operatingCarrierCode": "WN", "marketingCarrierCode": "WN", "aircraftEquipmentType": "73H", "features": [ "WIFI" ], "wifiOnBoard": true, "stopsDetails": [ { "originationAirportCode": "HOU", "destinationAirportCode": "TPA", "flightNumber": "653", "legDuration": 125, "stopDuration": 0, "departureTime": "19:05", "arrivalTime": "22:10", "departureDateTime": "2021-06-22T19:05:00.000-05:00", "arrivalDateTime": "2021-06-22T22:10:00.000-04:00" } ] } ] } ] } ```

Aside from that things seemed (idk still not consistent) to work when adding these headers: 'x-app-id': 'air-booking', 'x-channel-id': 'southwest', 'x-user-experience-id': '8731fe8c-7b95-4c3d-951a-27e757d56b64'

Also, 'ee30zvqlwf-d' and 'ee30zvqlwf-z' seem to have changed so I did update those in my code.

I can make a PR for the segments change if you'd like.

redfern314 commented 3 years ago

Sure, go ahead and open up the PR if you don't mind!

RayBB commented 3 years ago

Heh I noticed that at least on chrome (doesn't seem to happen on FF) the SW site starts giving search errors when you open the dev tools. I'll open a PR later.

aaron-pham commented 2 years ago

I've been playing around with this - it seems the headers are only valid for a short amount of time.

I had to do what @RayBB did and update all the ee30* headers (I also seemed to have an additional one: -a0) API_KEY and x-user-experience-id. Seems like Southwest is making this hard on us!


headers = {
    "content-type": "application/json",
    "x-app-id": "air-booking",
    "x-channel-id": "southwest",
    # Edit me
    "x-user-experience-id": "723bb53b-193e-48a4-818c-5bf8af51fcb7",
    # Edit me
    "x-api-key": l7xx944d175ea25f4b9c903a583ea82a1c4c,
    "dnt": "1",
    # Must not be empty, so I added a period here.
    "user-agent": ".",
    # Change all lines below this.
    "ee30zvqlwf-d": "ABaChIjBDKGNgUGAQZIQhISi0eIApJmBDgD4nWksBWFzbAAAAAAW_oC0AP5Mc6sz1Vvx8bQ7o_97ktI",
    "ee30zvqlwf-z": "q",
    "ee30zvqlwf-a": "PYTJtf4Pi6JTdTwNzRKmLKvIFbPgD5t6UtU2F-U7T9jBwbiLrIcGrFDFJE7EMDHiTzkgpfqJ2rd6BnP7R-7TU-S39aB5OU5dELfJy7TYbNwpR2nUkhKnKGPAWCAkpzc6Gaumv0TeBiYi3I6mDjfm-MW3cy-zB2uepkYsi-CdTZtRqmBm57DqLzniHXyHDsKjvXEaHPjzXWtPLI3j8UpYev2M29-Hnazk48qNUt42EHbHHoh6FhvZ4S_8li9Cc1BUslzW7BumwV9FM-RWi9XTwmtyWw8dNXJ4aIJtAHjWAKATNOTp9l6dEHwxiIEsqr0t431Ebx_CIBmKIijtHO2RGnVwPznnOnfi26zmJa-YeoqxZRnfZsK-ySxzwE0GIcGKn1U7jN7KyYN0h6GKUc42rB0TIm54_9yCJf7u92igaury03jlGSCOoogaYWjM18b_dtaI20AYzayotM2W6yRLh5Cp6qjpx_hB5aK6I_HZPNfhjlCG_4l9Wh-O6B__J=rKdGJZ=9miuODT-jt3qNL8MNqFI3L44XNZsGLdqXuEPF883DBAYz2D-27cOiNEyHh5MhUM-Hj--w1I_mSPUzBj_7xiH7kJ4B5WZbAC2ZvnlC2_Czsl7=pNEObsyvIErGmNZ2=HkL=g3KpaLp-h9xIHKwkI0i=JJs5J62e-CzG-3dcfAPspedidqvlDXAjocb-VJE0rZ6Eb6wR37uxtBfSsWqXGXIqoThnXK=I76qU2XRtzB3haaLSoGvoWsn_iAjEiE80y5It6mqjedBTbgg7VtT_KM8CVtXBeKDsSOgk-V6T8zKI5v=udr1IyZjpFAo4fbCHpSYLKTm8EzcMH3KUrHEChdOC-MYeWA_DucTJMFBEDnSGaDaiAXOhJWqw_vAP4MJNDxeFHA1S0rRaVh1L4guU89eOOwX0EqOr1noUR7R9bVif6JoXWbsqyJsPsxjoDiv=vbMreevlvj4=Pn0zIVcWsLzajY8P70E6zhczLwkBBHWsRv5kH0UBL-ZcE4laXnpS6rZ9=UIatX4OeXECDWgY8Y2dkql4knZ3vxJgvkhW2bXZyrefjEpZEo8nHnusB7MO=Rrd6Vqwo4dx0Y_Zrufc-EjCIIKgi4ua_uOA7MODSV9XG9wgCdiK1esE4RtyW7RCxvx_Bpy9h=NG_FS4_T5d5Lq4IC9vcowsKK8CfG-E=YhXEW0vOgxSbcSrO2YKKr6jJvND=Dk-KGvLCOD_-DH1m0CpGJjF9Np8CX_Eq5DMKTc_pJW-DHnmqsJvH6dIZuZCCCNBAk=HNfZCW3jKEoZ_=KgZ7FgG5c-rs3fpXcJFXujhfPUBY=g157oDqrwW0V0PDdTwfNq0a5_VgJdxmKuT4DtJODYMHI8xwkcYwVp1RjcbJczHHRqHOWE4HWVuW169==KD64E3CP4oN=z4Ro6k0Muh38tP=5V9BmG6_VwaM8i7Zoh40Uw5YNm4nX2mj=P6VkzBHcHi95g2mCPZxKr22Wbx5ZBW4K0swuVZCyAuUtdCcukpAJ6JDPkXqjlK2Vk2jRqwgHszqgK-dU0AKh8Nu2PEU-T1G21PKvcFqyFAUEB62X8kIqTI_aSoDuBegm97KPWB-puP4wutUxcJKM0MIGf9hEcgjSeZoM0y3K6tpedlkOkd3-0et-YfwpJUYo3NX8cVWsHz3-JO_yyAevOrl0yUkVUwBJq9B4up=Oy120J-KhC3fnMBoityv-Z8L3XA=dc28y2XDIx5qrAli4=6rdBKDhrujW5P=OyugfTy8MWVqA3ww4ZbugDnUs1yP4DLaWELMPcM3LOv72kfVw2ggVzWldHcJ=4eoJ_zSo8t8pPH=aPcEpFTA=gT_KXvYkNEdhq=l9W_FmV79g53=YXk4l1MaZM59J0L30rWK39f2LdImtZSXdfMhtc-yxESDlu80MbCkrqwA6IxMNodxms-IsniE=mFCsk_2lccB1RlyWvcc3AyHWHfW=YF-GK-m-h-Vwc87Bb6B60cWyqotF7tIuGEWDKAG_uxZXVfVRlIbWW2VgizZK0HwcH-a0P9NXpoKdNVBO2hYLDw_HT8111tOl_aSlGL=6lyk9Os99tJZ8NqUZ2Zr_AGj6YlbdCZH-9aygv-G8Kv1VrV0JStF-SttCTUZjvTLw2wAjr-xD0KXzfkyPemm6Rx8AEosm7eZeftrF-pLFLp36mRZ4jNYhP-Zr3JtdHacOtcBxMOI14p0FER5yrIHyBi2W_W6DViMbdMCzEFx9LibpflK8u1PArHslGtDtvPWAKqGeB3dP8m5cYgn4I8J3OV8xdMLL7B1tKJLckePafM2ob3YoCXunTMbwaKApXnfAbvPO=NnybFuHRBx9UhlnC7oz4ySKeOeIPpPArPU0CiSNj4nmCMff4GPKvkT_AbUWx7a5tKZ9KIy2FP4dVkjTVyWDIik-MX_TU3SxbOntUiD8AZKTrgOTIR9Hoo3j1bEGcxBz=rIuO0BSZKBbtimNLDu4xUy4IpuYkYTv_tC=q59GfRzI0_wsDsMhAMJeJhmT1Jn8GLIfnUjvl4zcGW3Zt3D764-yXwYnjgKLTPJqt_ipN2up2JElS_kMyXRh1WE6od6a1rA7LtjYYHNJbMtkJO0ficlsdrRjIvmheHYRJRp3Hl21aAbA02jxdCPMJ0OcwC62FFjZR3U=MDb1vch8Ztze=9YD1viZPVobI9chO4oOsrALqwWC7zu0DVv5kdt50TOzHPuuc5DB7dlT4lNu69ef9faevr8K9PZ26jD7nbyKmINBrB7hG-Wnf2qs6AmG8J1vhYiD=24q-Z8wYiIR=9ljr0LTqzo=78U_UUe8LjSM7kb49GT5NO44HI72JOwl2-kmO3xBy1sPrlcnu45=KdjSiVF=N_zymzyvbi6Yhr=gtzx9WNmV=hAxIGK66217x-VzL2ZBZMTiMoksXeReaTaLnDOZZ6VyMDZ6mIEhFnSU_vqPBlBzG1r_xcCt71o27F__4-m73vheihq7xmlXrleqUoX-mGJwMpC2UzH_wjyRqeaX6g65uSDKDDizOnxFoLVp6F1kw6weWvnAAETWxYvdSa0C7OEMlEnvp3IxcFMEek3GaOPgBgwXtXsH39WaZcj_9iI45FALxXEFNf0wEBuGsMVTYRRl2DsCKyR4OKp09=-i_noPa85pI_9xyTTc4Kam2gaGHoJKZa1LSS0iEnxBewwJCnh84nYppD_pomkMmUDNE5i93-3t3sm=Do20wyY=qV74tSUjnstdnSRtLZ_Eeo_Z38l1TVsnYr7de41Toy2TVChu_u2G6-qJEwG=nG3H2_Dc6ICWT4GN2KVW_BKwbr8grDy=cOtssZmRuFfLtk1yi_vYr5RxD-uJj2YOUClNxok7i1Ve6vwdrb-Oq8IiYz4PinmUhzBS2zRUFupiw=YPoIda4GLsgDAVFv3o8XYFPJYoWfITV-Z2ZUb91lCBaIKEhrwqwhuZ7v4Tfw6oda9rxvdk2XUP-S5gUx_olnhCMZd8yyxiV=gUvNiVkbBOP=ef4AAtpL6_ug927Pt4zF66LxkU9nmFs60YOYVoMIOln5JI2ruTmRUdrE1yEBmB1nk_4Cw17g2ufSw0AhbEitcITqi3zZkB=PWe3r1UChDusNz3yCdgHm1Ww09HYne0l59NC=0Abb-dXEgZt6-MrlkT9folqzAhYilp6iLNjKjaFOd=og4ZxKNU5=ipalkNiH9cc5435OI4oMFjTL1WoPUdUkXK8uUfM8Vq-62fNinGOobD4GZmdA-mgspXlbut1iztABRgUl3YVWhlJIiUtbGF-xutilXlH9zfuofRi146j3djFxd-E_sF-JMvfsEwrdX6UqbB6Py17T6ZWEq0aLX_gA7kG=r0yCfqNcxr=svcAYDp1H6qMVorXWZY_o9qO-MVdpv9V_Wt6YEwf9Gc9xbJd3zdTd190a1eN-5s=Yd=ns11i6ayL1GZP=CvjWSUcPo2nP_slUNIkuFz1kmYa69x7Z4kzs=qAnFuFx6iJs7nLBvGef3C_-55sBIdXjyCrUPSq928Fzdl3pxdWeeOYq0=ElJ4pNhUGtd09BCw_OOGwDKh5yGahabEcH1esyXzYBcph7F1zl9hd4rqper-_rxyHreIFd2Nphe-GiA28m-2oz23f4Gv4DIHwWf9MRJ7EkD9xLyR1BPw7OD9slGThFtC4CHhJE9HEcCjib2LfPeRGZewrCrOzWr1Dp_4ieVAIKC=et80b-yzdE4WHVcvf0RqjUt5Vv3B6-x5B9F3L7hggj_yygTUoIVNlvhrqF4Xknw4sbj7o3s1CCpu6Hn_eOelE0=ZRasjc6wDFp-AidHR_64_E8=K8V2nCZrJO4uR18dL12yCfjcPJl8Y7MDz4d6AeGBY8IPsyuozWXwtU9xrt6ZvvUs5lXif8kSm6tOhNJWttzlRLBpCvNA_G9SRkGYhGdF23xBfoklJhES5waPRxPj6Ju-r7r9Oplgo2sFR=DDlWzt8l1D8aHd4M7LUMHCi1dSPjCrMRgf4C8Nw4-NzXuNY3RIUUlFEsMhjRWttzeiIn2y8NsXFTs48EtvGZtOLOxc4m86GdiU6UHXbL4aDS5eUO46sy=jA4V9IygC5EgrG-zbMx8dVF5H=sAHdZAYaXitNp3xpPMhFMafr3XbnlJ=TecY3lowyKd-D3_Wul7VGf-=V=57-LukRaPueHiwKp_UtJa22GUkN7=lB1_ZBAD3F94NqanW2=MHxK9ErI6jw1OOIG4gUIe08dkuysIuL1NgozPG2WeKsSENpJU8N6zLy2yPbpkzN21wrflIg2-w-Wkm6kJvNYvErXZU7mxNESmwSWw=Ds6D-tBuIaod4X3mAvMAltMo5cNr1oSRgw4u8bcG0DdpMomo_=OVhI=Oi112KC0qYTm_CGgCma-e9S8hmWnE-kqb1pqt8nSJk016Xeqi0e51dMgBImo1_Hpn6TE4Na3tEj8sg8nGc3nEeAg3IV8i5Uk09Uqewu8ok9j5oZ2pRWLUAf2ZBEg9vayG6lLRW4mjVhGAJtWcINC5xEFHpH3-XGnW03MKFdDz2YB9z15O1Ybb---yF4168-3XAckZb01Y29XedRRxHnAxE0uqst66LzXm20gBYB5SDJmHIHKe0qfZDIVyKE_UfB0AhPcWFmvcBl6Fg27gS=0kZ_nhZaht6MIdaHYrwhC=M-bmpVIGeVSTg=piRjMv3mZOMMTm9MR-mUp_qYBA5JBzmCgTmV0VB3xYD4lqMaISjse9UewAREE8_TOnUMsxZ_sw=ne6utwrjb97jh6OghClKucBamq=HVGdHn_aMXaSxTBgOdaTx7M-FMPdI_O2a9NHwRGZIsz5jZU8HOvkogB=Wa7mPcdBtA--6j7Y0YUTPZC9cFPzaqdZuBol5_nyP-RJqOGL8ahqmJzKEkndr4pWk9R3EgZCiujZUuRZ_P-g1Z5BRUZfm2XuJpszJ2hfV59qeNoUZZ3i20_6Gp3HIDfPUhNEBeOxKVdR0p3UqCsLI3JTZLxZnRpjvNMa6wY2u-PvcR8gMZyp_783oYROFkWYG_j_wW1md_sIttIftugJ8tjo4BqCHHfBBt1CtVIun4UM-kep22-NJI3KWcgNLEaD4kj=4boau2l6AkWcWgaWZ6qHLshAKoAKGnvxfTd2FYxesYL6r-mXndAMW_aWooiR5mc_taW11vps2JZdnEB_aOE0kquOfrKobfBsvZKxSlz0oVkw16AFCJu7BpnswoSGJXrNm_AYDMeuS809uCLo36HnhvrJMXGDpXJpf50BnwwrnJnLwp5814AY7Sif6SD5y=21lySFmyFzyi04k_n8FNvrN99JpZBMB0nVvIHjqs5eWycU-M-1HC5DPEjjFdceALb=Trrk_eZnEKfRdrfS0ttKEcNuTi3jh6mJ35cwS-IqpSMP_atI85xso3eDDbp8-HxMOAFG9LrRnv7RIOUMjzx9cjr8IPNalvX=dy608LZJlX9XrnUWOguje=EEUPwxVH4vdGODUra0xdv6uWbuLavriSd3F_FyuGnGYA4V_2Tp03k0yYOHJ9S9wVZdiqU3nvxnwHrUaULgsC8d1OBG-7uS_TdqA2EV9z840tShX3AZUoeVWFlzSYwG7l3Bmxb7BP2fFzPtBu3EApCWu0KTKsAh-nXwMScGkF21nCOIEzJ9ZksoLUM3e5TWEGcAf5OTc4EzGFsp-0g9pjsigTK=LMo817zhWVf2DtCq2g-oS0sLsAlbp4PT2oOgZPz8ZnwjCaklY==Bi-O=Zn_S8WbZqSTI7SftoDVEBT7sb6DxB-LJKtDWRkjjmZAtqjdlNTMMgiNM=H5joyEcOUdjg9UnGMp75MnIDS8SOXnY045WGOdMygIgr3WUS2VJfaeR-snWyZwt3vDEqg-lXKYIrY-gc-Tcb1nRr-Im-Pi6rF0XbFY0s2Kc-GlgvT75SjvV13RX0YlFExS4p-HrJpGvwW3SOLVJ7KZy5bIjVVbRcueMpNjrAHLFrlnzuW4x23E--vIMgGD4vP2MgEUURMv4rtab0qVM7Y-_a-qS2O25aw3P33Me78VzJZB_D_grf5g6rOm878ac4k44oFi5RI9jCfwZTOV=or7kJmhcL-HHijjmC8GHv_-HUV-zTmUNxHan8f6i7WbbYhSkD58ltel_BXIpP0dAh2LrM7HECPlRADxmCzihjxtvhZJHtJHOMsCS4dI4JsLxfVrpOS=0ipsFMIZODBl1XnFSiv9AcUHv-EJGcD8Su5mCUP4lZzww9XxxhuLiudVcBZcgNm_y=DccWs_4_3vzOXWOMOm6uL=t3WAriFRn9o4ZnJDxFpy05L468O7RwtKeUO3Ux_93zIKhe2emPSbSgHE_NgVEiqI5RmL97EOiyqbqiLsfi0j_OcnF2BNkRfXKWDPRyUj4-4_CS_IiIIxk01l6z=3fSJlHpObtKtJvT02jXpz4nBdLOrgIL2eAGwa6M1qe9WLx3x6KLp4FwVTleZuc3GBBefdRylSLndZFDUZt4mVo9ixiyoWjyDEX_ttP3n7FzdjS5N_XJ4anchfCjyOa0LZA5=zyVwbqFJtjd_2l8-gEAMgMgBmEI97BqLBNsuEFZSvZoObY6E_1Xtjc-a2=n0CWu2HFcUvtPA8hycMj8IliZs3z437Rr6qp2=MpaJLODpVvc0SMH0qmZ=61rEiw9oZW2YKSD9UF1wYqbaO4noEOA=zjsRosa741-YAv2ewg6dVu_9XOVt_-Ni4-SDV0AsUmTSmykgcBYYFgj81BeknI6=1H07ck82surNa1qah4ydpRdcG9J2zfjcwIaBwEZtRjp7_hW-DRSi2BuTtZphS8aJp3fAWYk076Nndr4IMCCh0IptvEH9vnUf6uusbyRY6xmTZRzpw6Xs=n_c7UTASiODS-_Yi7MYKdJPZyxB0boyziRa_J8pVBdGI34MzteTO790VvtcT-r2DsWiPaGet=aoWqA0LrE6ifBS3a-n_nKES1xPKV0WzBz6u=ICldR9RPf9kSGWnx_plgCaPTk5skYxdqarCLDdfUoMMoF27cknFfubi0cK3=m1ZBx0=-FEqyz5pbj3fnciwYvMcLA==5hT3Dpfachw7cB_He2aG5nEc_6pnNipmNnTuKPfaW4D64XWxw_XY8CVgPEIVG2aU6e695GiAIF=mPdMo0wab6=yrKrqY8C0p0w0d1Nmv4OtpMN36X9NqamV5aF0Su80WgMeDquNHKtiazf6t82l5Wqb-wDspLAW4F7p0ZMX_Sn=5m9kMfqL6vtALUUVa5pOjqB9cR84rz=2C0wz8MfeRWbNHiJWkb7lA6hqVyZ6MWy3nR=pErvgXUOYU4OIR2Xe5gnjjMz20vZUadG-sae0nGXcRk7jCy7wjiPxXWIc8=DDkGPm_cawuJ5wHSJD0SY892Vont",
    "ee30zvqlwf-b": "juzi7n",
    "ee30zvqlwf-c": "AOATKnJ9AQAA01p5i4zVnDieWlz3lJvzFSAUoqHQgMwmAGedIPidaSwFYXNs",
    "ee30zvqlwf-f": "A2CCKnJ9AQAAN6yBvJ6sYvim__NSpvsjQDci37HaWk7FYYnZ2DICffM_qBKwAUM66ZKuci2nwH8AAEB3AAAAAA==",
    "ee30zvqlwf-a0": "K=N5l52ljfMsN4-vf3ClOhpXC-pgP6MfteRLWmj4NMTmL=Su-iHARuchJsSdjGh0eecYwKNGvChr4GwTlj-q6=0g59sKJbNHtfYZtAsPYxUm6lj4GWYHPnZ9ld99KGFJ=GHa0aWL=Rjb9jqNbNfz7hdcHG64XG7dp3VB=JZ1fgZteuIqmhbtMegs4ZMNGLNv0=s7EUiKjyRSyek0HFsfouZ-LxN3KDY5LP-uovN",
}
lzh414895156 commented 2 years ago

Has the request header been resolved?

redfern314 commented 2 years ago

Hi folks - I'm mentally switching this project to abandoned, unless someone else is able to come up with a solution to the magic headers and PR it. I've tried a few different methods and from what I can tell Southwest is just too sensitive these days. They can always tell if you're scraping - requests will just get 403'd. Sorry!

RayBB commented 2 years ago

RIP. Thanks for keeping it going as long as you did 🙏

aaron-pham commented 2 years ago

Hey, I don't have time to make a PR just yet, but some other projects have figured how to get the headers programmatically - see: https://github.com/byalextran/southwest-headers, you could likely have this script run, and grab the headers before each search.

redfern314 commented 2 years ago

Huh... I spent a few hours yesterday trying to do exactly that (even down to using selenium-wire), but the headers I captured weren't working for future requests for some reason. I'll try this out and see if it helps!

aaron-pham commented 2 years ago

I spent quite a few hours attempting this, and could not accomplish much. The headers never worked out for me, so I played around with the chrome webdriver and seeing if I could actually get to the SW search page.

This ended up working which gave me confidence to just use the webdriver code to actually fetch all the data, but the body of all the request looks like this below:

I'm not sure what kind of encoding this is, and decided to stop here. SW likely killed this :(


b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xed]ko\xdb8\x16\xfd/\xfe\xec\x11DR/\xe7\x9b\xd3$\xdb\xa2\xce\x03\xb53\x99b1(T[\xce\x08\xebXY\xd9n\x9b\x9d\xe9\x7f_\x92\x92#\x91\xa2$R\x8fXV\r\x0c0\xa9l\xd1"\xcf\xbd\xd49\xe4\xbd\x97\x7f\x0f\x16\xee\xd6\x1d\x9c\xfd=\xd8xn8\xff\xeb\x93\xb7\xd9\xad\xb6\x1bra\xe9\x86\xdet\xf7\xf4\xe4\x86/\x83\xb3\x7fG\xff\xber\x9f\xfc\x15\xfe\xe7\xe0\xe1_\xe3\xc1p\xf0\xe4\xaf\xfd\xa7\xdd\xd3\x15\xfe\x84\xdc\xf1\xcd]\xed\xf0\x1f\x03\x08,m\xe4\xe0\xcf\xe7\xbb0\xf4\xd6\xf3\x97w\xc1\x82\\\xbf\x9f^\x0c~\xfe\x1crM\x9d\xdfO\xf3\x9bB\xbaJS\xe3\x9b\xcf\x05Oe\x155\xf5\xe7p\xe0\xfa\xe1]\x18,vs\xd2\x7f\xdc\xe1 \xf4\x1f\xfd\xb5\xbb\xf5\x83\xf5\xd8\x0f\x9f\x83p\x1b\xdf1\xbd\xbe\xc2\xcd,\xbc\xcdV\xf8\xf1\x84\x8e\xcd\xd2\xddl\xf17.v!\xfd\n\xben@\x9d\xfcz\xb0\xde\xba\xfez3\xfe\xe6\xfa+\xf7\xab\xbf\xf2\xb7\xf8\xd1\xb7\xe1\xceK>\xbb\t\xd6\x9bm\xf0<8[\xba\xabM\xea\xfa\xb9\xb7\x0cB\xef& \xcdq\x1f\x91\x8b\xb3`\xea\xff\xc8|2^n\xbdP\xf4\xc1\xcc\x7f\xf2n\x97\x17\xeeK\xe6\x93)\xfe\xf1\r\xffP\x17~\xe8\xcd\xb7\xc9w\x99Q\\\xefV+2$\xf8\x9b\xab&Fo\xe1=\xbb\xe1v\x17z\xe4!\xf1U\xdd:3M|\xdd\rC\x1f\x03\x1a_\x05\xf6\x99N\xae\xae\xbd\x1f\xdbt?\xb6\xc1\xd6]%#o \x1d\xe3\xb1\xf2\x1f\xff\xda\xde\xec\x9e\xbez!y\xc2\x01D\x8e\x81\xef\x05\x96\xa1\x0f0\xfaK\x7f\x85\xc7i\xe6>\xd2\x0f\xcf/\xafn?]~\xb9\xb9\xbd\xbd\xc1\xdf\x19\xff>\xfe0\x19\x9fO.\xf1\xdf\xd3\xd9\xed\xdd\x94\xdc\xf0\xfa\x88\x17\xeev\xff\x98P\x87\xf07\x1d\xffg\xcc\xe8\x13\x9f\xe9\xba\xa6\xeb\xfao\xba\x83\xffJ\x1e_|\x07\xed\xcd\xeb\x1dft\xc7\xc6{|\xf2\xd65-r:\x9b\x0c\xd8\x11 \xbf\x1c\xf5\x7f\x91\x18\xa8\x8e\xce\x10\x1dN\xfa\x95\xdbel\x06\xba4\x1c\xf0\x0c\xe9\x836F\x864\xfcz\x87\x15\xdd\x11<{\xe4\xc9\xd7\x8f\xef\xc8\xbd^\x18\xf7\xf5\x81\x00\x86\'\xad\xffx9\x9fa7\x9f\x87\xeer{\xf9\xdf\x9d\xffL\xc6v\xf6\xf2L>\xb4\xd1{\xfc\xe9w\x7f\xe9\xdf\xae\xcf\x037\\\xec\x1d\x80\xb8\xe2\xe6\xa2\x01\xd3.\x82a\xe5=&\x06\x0b\x81\x19\xfdlr\xc9\xc6W\xe6\x7f\xb9\xebG\xefn\xe5\xae\xbdW\xef\xec\x1e2?\xff$\xf3r\xfe\x18\xd1A(\x9b<\xd91\xa2>\xca\x9a*<\xa3\xb3i\xb9\xa9\x02tf\xe4\xcf\x1c%\x03Bo\xe6\rO\xdd\x89\x9b7\xd5\x87\xda\xa6Z\x1d\x06\xc6T\x81\xa1\xf3\xa6\xdaI\x10\xb0U\x92I\x1es\x82\xe4\x1d\xff\xf7`|q?\x99\x91?\x08\x9f\xc1\xff{\x8e>\xfb\xb0\x88(\xce?\xb3\xc9X\xff\x04\xdf\x0fgC\xec\xdaC<fC\xde["7\x19\xf2.\x11=\xe7\xf0\xe1\x86\xfcG\\|\x88\xa7\x97ts\xb8)<\xc6C\xbe\x9b\xf1}|_\xa2N\xc4\xcd\x11\x18\x86\x91\t\xccW\xeef\x83\xad\xdf\x0b\xbf\xf9\xf3\xd7\xd7\xf03\xbe\xe8\xe1\x99"\x8c\xcd%\xea%\x1e\xb3\x14\xe5\x98n\xdd\xednC>L\xbd\xdbbkYE\xd4)jl\x19\xd3\xa8\xaf\xee\xc6\xe3)\x15\xb0G\x9a3\xca\xa1T\xf1kx\xe6\xfe\xf06\xe3\xf5\xe2\xca\xf36\x0c\xb3\xb35\xbd\xe4V%^\x89\xbb7\x9f\x87;wu\x17\xf8\xf4}9\x00\xba\xa3\x93\xeb\xdf]\xff\x9b\xb7H\xfa\x84/\x11\xce\xc9\xc1\x8d/\xfdsN\xf0qf\xc3\xf3f\xe0N5\xd7\x0b\xb8\xa1\x854\x0b\xe4\x8e?V\x10\xdb\xcd\xc4[b\x8eh\x96\x80o \r\xd9j\xe0\x17*\x81,\xf8\x08\x0f[\x0e\xf8D%p\xe0\xe3K\x91sZ\xe7\x8d\xfaz\xd4\\?\xc0\x87\x96F\xa7\xff\n\xben\xe8\x9a\x99\x0f\x9d\xd8\xd7\x8b\xd4Z\x16n\xfctb\xb8\x7f\xfe,f#\x15\xc5\x08\x10\xbc\xcd\x9c3(!FLS$FF\x10\xe2[!\x82\xa5ZDA\x7f\x00E.G:\xd0\x8a\xfe\xb8\xb8\xbc\xc9\xb2\x89\xa8\xcb,\xa7\x03\xd2\xf2C\x00\x80>\x92%\xb9\x8a\x03C\x1b~\xbd\xc3n\x8b\xd39-\xcb\x8f\x02\x14XJ\x872\xea\x03\xe2\tIV~\x1c\x18\x99\x12\xf9\x11\r\x82\x1a\xef\xa5nYQ)\xe37\x84\xa9\xe7\xce\x15e\xcc\x97\xdc\xcc\x1b\x9e\xba\x0fwP~\xd4\x80\xa1L)w\x12\x84&\xe4\x07\x1e\xb3!\xef-YJB]"z\xce\x98C`\x17\xc7\x14\xc2I\xb5FZ\xe2\x19\t\xe9e|\x1b\xdf\x15\x86\x91\x10\x14\x9ac$\xd3\xdb\xc9\xc5\x97\xdb\xfbY1!\xa9A\xe2\xeb\x0eZ\xd2Z?\x06M\x8a\xfc6bi\xb4\xb5>\x0cZ+\x14\x92}\xbb\xedg\xa4Q\xfcZ)\xa1\x90d\xd2\xcbPH\x93\xbe\xc9\x91\x81ZY\xcd&\xcf\xab\xc6&I_Za\x93\xe7\xf7\x9f\xb2/\x073\xc3&\x81\xec\n\xa1\x18\x0bl\xddP\x86\xb3(\x0f\x0cm\x98\xbf\xa3\x83\xaf\xe8\xea(0oh\'\xb3>h\xc8r\xc9\x83\xe3R\xc2%\xa3!P#1\xc4?Y;\xb5\x84T\x12\x08X\x8c^4g\x94\xb1\x18\xbd\x11\x07\xee\xa0\x9d\x96\xa0p}\xf1\x90\x87\x02\xcb$\x91\x84\xa1\xc6\xf3\xb1$2f\xc4:\x9bG\xc6L3\xd2h\xd3\xa5\xc8N\xa3!\xa8b\xa7\xac.\x84R\\\xdb\x8a\xb4^5+\xb5\x04\x1b}\xaaV\xda\x04\xd7\xc6F5\xe4g\x13!\x03\x82\xfb\xcb\x11g1)\x03zH\xb5FZ\xe2\x19\x90.l\x8dv\x85a@\x18\x84n,\xfe\xd5Y\xe87\x80f\xaa.\xf4C\xa0\x19o\xb7\xd0_\x17\xec\xa4\xb5^\x80]\xb2\xcc_\x0c\xb6\xad9\xaa\x0b\xfb@\t\xec\xba\x0b\xfb\x8dx6m\xad\x1f`\xd7Y\xd675]uY\xdfV\x02\xfb\xad\x97\xf5E\xabD\x92\x9a\xcc\x11j2\xc3"\xcb\xfa\xd06\xda\n1\xea\x8a(\xbb\x18\x0bb[\xa2\xee\xb3\xeb\xa6\xf2K\xfc"0\xa0T\xc4@\x85\x81\x81\xe9\x88\x81\xa3\x8d0*@\x81\xa5r\xa3\x0c\x953\x15\x02\x8c\x0e\x0bL\xd9\n\xffX=\xb2\x85z(k\xa9\xa6\xb4,Cud\x19J\x93\xff\x8a\x84\xb7\x93\xb2\xac\x04\x86\xd9]>\x0c\xdcnT\r]&\x86\xc6:\x032\xbaL\x1d\x1a\xd20\xa7E\x8a,5\x1a\x83J\x96\xca\x0e\x91%)\xcc\n^o\xe5\xc2\xcc\xd4y\xab;\x840\xc3f\xc5\xc7e\x88\x08\x17\xa4\x81\x14\xa9\xb8\x0c<\tr!X\xa4\xa5lX\xc6\x1e\xebb\xfaFP\xe8\xc2\xd2t\xae\xc0\xf9\x88\xbby\xe9|\x1c~ld\xd0\x92\xd6\xba3huH\xaf\xe5`\x99\x92OzS\x81L\xa0\x84\x02c]l)\x8a[\xdb\xb25#\xff\x1e\x9e\x02;\xd0T\xd4;\x9f1Zw\xd6\xe7\xe1\xe7F\xb0OZ\xeb\t\xf6\xa6\xa9A\xa3\x11\xec\xed\xa2\x86\xc4\xd8#\xa8"\x7f\xf0\xb3\xa2\xb7\x94?\xb0\xb2\xfc\xb1\x84[R\xc0q\xda\xdc\x93\xb2\x04\x1b)]\xda\x93\x8a\xbb_mSJ\x88\x86n\x9f\x19r\x814\x8a#C\x1b\xee\xe9\xa6T\x0cC\xc9\xae\x14\x90\xde\x96:82\xa7m\xa9#\xd0?\xa7m\xa9\xd3\xb6T\xeb\xdbRV\xb2J\xcdO\x19\xcc\xe25\x99\x02O\xfbR\xc7\xbe/\xa5\x8c\xf6ic\xea\x887\xa6\xaa\xf9\xf6ig\x8a\xa2\xdd\xbb\x9d\xa9\xea\xd1\x82\x16\x12I3\x88L \'\xcd\x14\xe4XgB\x04\x85\xec*\xee2\xbb\xc8o\x08\xe4\x98\x80\xe4\xe6 \x80dI\xbf\xea\xc8\xa04\xe9om;\xaam96\x19Osa`8\xdc\xa8:\xc9\x15#\x83\xa7I\xc9\x8c\x13\xd5(A;M\x05\x9dR\x92\x1b\rA%C\xe5\x12\x1d\xb2\x8a\xd5\x96\x0f\xa4\x04\xd5\x8d\xd7IojT4\xde\x12\xc5Z]\t\xb0\xe9c\xbadN\xce\xc1\xb5@\'\x9d\xf9\xa4\xc7\x94\xf5\x18\x1e\xb2!?\x9d\x08H\x16\xa2\x9c\x8d\xc9\x126\x01\xa7\xc7HS<g\xb3\x92\xec\xe2\xb7\xe3l\xad\xa7\xe4\xd4\x1e\xb4\xa4\xb9^\x0c\x9a\x94:h\xc6\xd2hs=\x18\xb47\xcc\xea\x8e\xaf\x96\x95\x98\x82\xf9Y\xdd\x0e4[\xda\xfePM\xf0f\xee8%x\x9f\x12\xbc\x13\x91(\x1f\xfd\xd5\xbf\xfcn\'J\x03f\xc2\x14E\xbaPDc\xf4\x88\xb0\x88\'\x8d\xf2%\xf6\x14)\x91\xca,\x16yp\x07\r\xb5:\n\xac\xe8\x81R\xc5\xa5\x0e\x8eA5*9\xc5o\xe4\x07\xcc\xfd\xa6\x8d\xe4\xdc&\xad\x89rnu\xfa"\xcf\xe4\xdcF?\x92z\xbfc\x10\x86\x11\xfe\x87^\xfd\xd3G\x9ae\xe5.\xc7)\x84i\xa0\x91\x86\xa0\xe2Z\xa0\xe1(\x15\x9a\x82\xa6\xa3\xbe\xce\xff\xe0L\x1b\xccQ\x8fZ\xeb\x07\xf4#\xa4\xa1\x92\xd5\xdb\x82\x85_\xabd\xcd8\xb3\xcc\x8f\x94\xc0F&\x04j\xcb\xfc\xd431\xf3n\xd0\xcfik\xfd\x00\xdb\xb44\x90\xbf1\xa3\xe0\xe7\x06\xd4\x9c\x92\xcd\xa1\xac\xa5)A\x8f\x9f\x15\xbe\xdd\x9a\xbf#bZP\x8f\xca{\x96f\xa3\x88\xe4\x08\x006\xe9\xac\x8d\xec\x96J\x04(\xb2;\xda\x99V\xf4\xc8\xfb\xdb\xfb,\xc1\x88\xbb\xcf\xae\xff\xeb\x92\xeb\xffB4p\x7fe8\x86\xfa\xc8\xd0\x86\x8f\x7f\xfd\x7f|/X\xff\x8fa(\xcbG12\x8a$o\x03@\x0c\r\x92\x93$\xea\xd0\xa0l\xc5\xdb"\xe7\x8f\xc6\xa0\x92\xa52Cde\xa8\xb0#\xa9\xd9\x80Q\xc3v\xe9\xcdjK\xadY\xdb-\xd1l\xd1\x18\xa8\xa9\x05\x9b\xd6\x8f\xac\x94Z\x86\xdf\x86Fv\xe9y?\xb3\x96/=gw\xe6\xd4g\xb9\x0e\xfaru\x14\xca\\\xb9\x93\x18T\xd3l\xd7\xf1z\xfd5\xe5rx\xc8\x86\xfcd"X\x945\xe9\xe5\xd4\xa2,\xf1o\xba(\x9b4G\x9a\xca.\xca\x1a\x82EY\xda\x17\x86\xcca\x14\xba\x12\xb2\x014\xdbl\x84\xcc\x19\x9a\x8d\x14\xc9\x9ce)\x05g!\x94\xc7\xe3\x0bw1\xaec\xd1V\x1b\xfb\xa4\xb9^`\x8ftS3\x1a!\xf2&\xd0tE"\x8fL%\xec\x91eYj\x1a\xee:\xde=i\xd2\xefis\xbd\xc0\x1eZ\x8e\x06\x1bY\xac1pC\x8a\x8b5\x08(a\x8f\x9f\xf5MsjD9\x97q\xae@\xd9\x9e\x92-\x12qQ67\x18\xe9\xb0#%\x05\x98\xfc\x84SI\x81SI\x01&\xc9\xe6\x97-)@=\xb4\xaaBAQeZ\xf1\xb4Q\x9e\xb7\x0e\x15\x15\x9b\xc8\x85;\xa8Pj\xc0PE\xa2\x1c\x1c\x84j\x12\xe5S\xac)>5\x92\xfe\x9b\xb4&N\xff\x85\xe2c\x0c\x0c\x9d=\xc6\x00\xa3\xd0\x11\xaabCmT5\x87\xc0\xd0t\xe5\x1c\x02\xb5#K,\xa4\xb8\x934\xa1*\xe2\xd3p\xd2\x08\xdaIk\xfd@\x1b\x8d\x90\xe6\x94\xe4h\xe7\xca\x10\xa4\x01\xc5\xf4n\xc3PB\xdb\xb0\xa1\xad&C\xa87Z\x93&}\x9b\xb6\xd6\x13\xb4\xb1\n\xb4JV\rr\xd1\xd65\x94\xbfr!F[\xf1D\x1a\xd3\x12\xa3\xdd\x8a\xf0\x18\x89\x8e\x81\x83@\xae\x96\x998\x98\x8df\xd4\x00\xc3\xb4Z\x11\x1e#\xd5\xa3\xe7hg\xde0\x9aM\xe77\x8f\xe4\xa3\xd9\x84``\x07\x93)C\xa4>0\xb4\xe1\xf6\xa3\xd9Z\x17\x1e\xf9(\x94E\xb3\xc9gF\x1c\x1c\x99\x16\xc2\xd9\xa8\x8b\xf2\xcaC\xf6\xb8\x12a6\xcd~\xde(_\x97\xd73\x86\xa7\xee\xc3]T\x1e\xd5a\xa8r\\\xc9\xc1A\xa8\xa6<\x1e\xe2\x10\xb4\x07a\xa0\xcbH|\x82\x1aq\t6\xd0Ew(;IZ\x13\x05\xbaD\xf1\xef|\xa0\x0b\xed\n\xcbN0\n\xdd`\'$\xd8D\xcfg\'*\x8b\xa4\xa66R\xe4*\xc8@J:\xc4vFU"\xda\x1er"\xdaT\xb1OZ\xeb\x07\xf6\xc8ijc\xcc\x84\x1aT\xdc\x183\x90\x12\xf6\x86\xe9(\x06\xb8=\xc4!i\r\xfa=m\xad\'\xd8\x1b\x86f6Rp\xcc\x18i\x86\xa2"%\x02XE\xa3`\x05\x9b\xa7Q\xf0\x0ba\x15|\xc7\xaf\xc0\xfdo\x90N_\xb9O\xfe\xea%\x9a\xff\xc5\xbf2\xe4\x8fo-V;{9\x93w\x846\xe5\x8cKw\xb3\xc5\xdfH^\xa2\xd8-h\xd4\xe7\xfe\xc8\xfb\x14\x86\x99\xc3\xedo\x825y\x03g\xae\x9f{\xcb \xf4n\x02\xd2^\xc4\x0f\x92;\x82\xf5,\x98\xfa?\xf8\x0f\xc6K\xac\x81\xe8u\xae-\xf2\x92\xbd]R\x89\xc5\xde\x113/\xf6\xe2\x85\x1fz\xf3m\xd2\x083\x88\x91\x81-dX\x8a\xd4\xd8I.s\x8e\xe2d\xda*J\x11\xd1\xed[\x08-A\x9c!\x91\x88_f\xb7_\xa6\x1f\xfe\xa8\xa4\x14mni\xb5\xbc\x14\xa9=\xa3\x9d\xe1\x89\xba\x9cR,\x19Rq\x15\'\x9d/3\x10\x9f\xbe^y\xe1\xdf\x90\x08\x8b\xa940FZ\xc1t7\xcc\xb0:\n\xacR4\xb31t\x92B\xf1\xf0\xc0\xd4K\xa1\x8f\xe7M\xbe\x96\xb0\xc5\x07\xd1\x19\xd1N\x9c\x94P\x14\x05\x15\x8e$\xf6\xecl.\x85\xa6|w$\xc7\x85;\xb8\xa6Q\x03\x06V(f+bt\x12\x84\xbaI\xf4\x84\xde1\xa9\xcd\xf6~\xe1\xd9d(^\xec\x12\xcc26\xf6pA\x0e=\xa1\xa0|/\xf9e\xec\xb8+L\x19%\x82\xc20\xb2\x80#.j\x86lMW-j\xa6\xb8EU\xa3\xa8Y\x13h\xb3\xc9\xff\xc7\x8fv\xad\xa2fHC\xaa\x1b\x92\x8a\x9b\x165\x8a\x9a5\xe6\xdb\xafU\x0bz\x80v\x9d\xa2f\xbaf\xaa\x165\xb3\x94\xd0\xaeZ\xd4\xac\x9a\xf0\x80"J\x05\xe3\x9a\xa5\x95\x8a\x9a\x01\x08H\xb0\x07\xb0A;\xca\x03\xaa\xf28(*\xa2\xda\x88\xf2\x10\xee\x8e\xc4\xfdg\t\x9d!}P\xb9\x88\xe1\x9a\x12[!UF\x866\xdc\xfe&U\xdb\xd2\xa3\x08\x06\x96\xd09\xd9]*\xe9\x04\x9e\x83CSo\x97J\xc8z\xa9\x93\xf22Y\xd6V\xf3r#u\x99\x01aR\xbe\xca7Hr\xbc\xb8\x83\xb6Z\x03\x86*\xe7\xc9\x1c\x1c\x84&\xc4\x07\xb3Z\x1d{\x8b\x80\xa0\x98\xfcj5\xf1qN}\x90\xa6x\x86\x12e\x06\xd8\\s0U\x8c5n\x0e\xc3\xd0\x8d\xe5\xea~\xab\x8f\xdap\'\xcd\xf5\x03\xee~\xcb\x8ff\xbc\x9b6\xd7\x13\xb8O\xfa\xa3\xa4\xa4\xef\xbe$@\xb1\xfe\xb0\x85\x1b\x1f\x00\xd1\xa4E\xe0\x00\xa7\xf9\x189\x9b\xabV+I\xe5\xda\xd2\x1fcAZH\xdc\x7fV\x7f\xc8g\xe7\x88\xea\xf8\x8e$\xb2\xd4\xab\x8c\x0cm\xf8\xf8\xb7>\x8a``\xf5\x87\x99\xe1t\xf4h\x11\xc9\xfc\x9c\x03CS/?GL|\x89\x93\xf2Qr\xa6t~\x8e.\x14dR\xd4\x17\t\xf2\xc2\xd4\xbd\xb8\x8bU\xdf\xaa\xc3\xc0\x9dy#\x99\x9fs`\x10\x1a\xd1\x1f\xe9\x18~{_\xd7\x95g(\xd4%\xd8Tb\xec\xe3\xbc\xfe\x18O2\x0c\x05%\xb1\xff|_\xb8C$\x80\xd3\x8d\x82P=\xd7\x1fu\xe1N\xe9\x8f^\xc0\xdds\xfd\xd1\x88wG\xfa\xa3\x1fp\x9f\xf4G*\xf7\xc0\xa8\x1cxe\x1bB\xfda\xda\xf9\x91W\r\xe8\x0f\xf2\xc4]\x8e\xbc\x8a\xfb_iM9\x07\x0e QF\xac\xd2\xc8\x00\xc1\x11\x06\xc7\xa7?\x8a`([S\x86\xb2\xfb\x1f\x87\x87\xe6\x14|u\n\xbe\xea\x1e\x08-\x04_Qo\x11\xac\x90\x82\xe4|\x88\x98R`\x1f?E_\x1d\x9d\xfe\xa8\r\xf7)\xfc\xea\x98\xf4G3\xde}\x8a\xbf\xea\xa5\xfe\xb0s\xea\xdb\xc8\x9cwc\x0bk\x93a\xd9J\xfc\x01\xeaF+\xf2\xc3V\x8ed\xb1\x05\xd5}[\x0c\xbf\x8a\xba\xcf\x85_\xc9Q\xba\x1c4t)6Qad\xf44\x9b\xe8Y\xf8U\x04\x03\x17~\x95\xa1tHz\xfb\xe3\xe0\xd0\xb4\x10~E|4\xa3\x94%\xd5\x87)<o\xc5\x96\xda\x0e\xa27+\x05\xfe\x08\x9d\xb8\x83\xea\xa3:\n\x9cP\x96\x12\x1f\x07\xc7\xa0\x85\xe0+\xea+\x02z\xa2S>\x91\x0e\xcf\xc0\x1e.\x11|e\n\x0e\xc3\x88\xfb\xc2\xd2\x13\xdd\xe8\x06;\xe9\xb7\xf6\xa8\x8dvq\xec\xd5\xd1\xa1\xddo\xe9\xd1\x8co\xe7\x86^\x1d\x1f\xda\'\xe5Q\x9e\xf9!s\x9c\xbdx\xe7#\n\xb97\xa1\xa08\xd9\xa1\x12?\xdeRy\x9c\x12?:\xa1<\xe4\x12?\xec_9\xef\xc3\x84|q2\xb1F\x16\x1c\xc2\x04\xac\xa2y\xa3|\xc5\x1d\xaa\x91^\xa1\x0f\x1f\x9f\xf0\xb8\xbd\x99\xe5\xa1\xc0\n\x0f#c\xa8fF!\xe7\x9c\xc1$F\x06\xbf\x8dM\x19KUF\x866\xcc\xc9\x91";\x8d\x86\xa0\x8a\x9d2#\x94\xf5dqZ\x8c\xf8d\x1b)#u\xd2E\xa0\xcbK\n\n\x8d\xf4\x08\xd2b,\xda\x9c(p\x9eeo\x18\x84n\xb0\xb7:\xca\xcc\x00\x9a\xa9\xaa\xcc P:\xcb\xa6\xdbY1G\x87v-efk\x8er\x91p%\xb4;\x9e\x14s|h\xd7Qf\xa6\xa6\xab*3[\t\xed7\xcf\x89\x11\x969\x92)\x1bm\x8d\xc4{B\xf4TV`\x8e@[91\xca\xb5\x95P;\xd2L\x1c\x0c\x15\xf5\x9f+\x07&\x9f\x13\x93\x85C\x979\x82\xa2\xca\xc8\xe8\xb6\xe0\\\xbd\xe3\x93fE0p\xf5\xc0\xb29\xf9@6&\xed\xe0\xd0\xb4\x10\x93F\x9d\x94\xb5\xd5\x98\x8eK\x9c\x90;\x12\xeeH\x18\x12E\x8bi`B\xca\'\xa5\xc2\xa1D^\xdcA[-\x81\xe1\xee\xfd\x1f\xb90p\xf9[\x99m!CV\x9d\xe5@\x13\x87\xc66\x0f\rLG\\\xda\xa5\xea,\x1a\x83J\x96\xca\x15\x82\x97\xda9\xcb\xab\xe4\'c\xa7l%?)\xa9\x9a\xb5\xd36\xc2\xf6,\xca\xae2\x89\x05vr\x92\xe0~u\xdd\x91\x08\xdb\xa3\x98\x0b\x02{\x0cz9\x9dX\x80a\xe8Fbs\x89@KU\xd9EG(\xd7>b\xb4.\x9d\x8f\xc3\x8f\xcd\x80\x9f4\xd7\x0f\xf0-\x07\x8b\xae|\x06\x9f\x02\x1f\x96\x80\x8f\xad\xc8R\x04\xdf\xb6l\xcd\xc8\xbf\x87\x07\xdf\x81\xa6\xa2z\xfb\x8c\xd1\xba\xb3>\x0f?7\x03~\xd2\\O\xc07M\rJ\xd5\xd76\xcb\xc0\xb7\x8b\x1a\x12\x83\x8f\xa0\x8a\xe7\xe3g\xadt\xf8h\xb3\x05\x0e\x80L\x81\x03$\x14s\x0e=|\x14\xa0v\x02\xfc\xaa\xd47\x00\xed\xd478\x7f\xf8 `\x1d\x0e\xbfw\x01j\x967\x90\x0b\xd8\xa9\x90C\xcf\x04\xect\xf7`\x95\xea(0\xd4\xcf\x16\x1c\x01\xa4 \xe4\x0e\x0bL\x89\x90\x8b\xc6@\x91\x1e\x13\x0fe-\xd5\x91\x15r\xd8\xa1@\xfe\xb4QF\x90\xf5\xb4CVv\xe1\x0eZj\t\x0c\x93\xf14\x17\x06\xc6TQ\xb6\xb8\x81\xb4\x90\xcb\x81FN\xc8U\x80\x86\x11r\xe5\xdbl\xd1\x18T\xb2TV\xc8\xe95\xceg\x95\xb4SF\xc8\xc9l\xb4\t\xec\xb4\t!\x87\xcdJ&C<\x8akJ\x9fo\xe2X\x9c\x8e#-\xf1k\xf1:]\xc3\xcfY\xdaO\xb39\x8cBslnz;\xb9\xf8r{?+&s5\x04P\xddAKZ\xeb\xce\xa0\xbd\x8d\xfe)\xa5\xc0\x9d\xd7?u\xb1OZ\xeb\t\xf6\xc5\xf2\xe7\x97\x12<\xe2D\r+\x8e/*\x13<\xc2\x8a\xd2qF\x13~kw$\xa5\xc9\x12D\x88\x9cR\x9aN)M\xaf\x1bZ\xbfnJ\x13\x8a\x96\xf0S\xb6\xba/\xe6X.z\xa0(jk?u\x94\x87Z\x1a\x99\x90Vu/>\xbe\xd0\xc2\xe9X`\xab1\x0ce;\xad\xf2\xb1\x85bh\x0c\xb9T\'uh\x8cl\xaaS\xe1\xf1\xdc\xe3\xca\x96\xca\x0c\xd1HJ\xf3\x98\xc2\xf8\x0cI35\x05\xf1\xac\xaafz\x04i_\x90.}gRC,z9\x9d\x1aB\xa4x\'"\x90~\xa9\xe8\xc2\xa6\xf3\xbe\x8e\x0f\xee_*\xbc\xb0\xe9\xc4\xaf#\x84\xfb\x14_\x98Z\xc04\x05\x19\x1c@\xae\xe6\x9d0\xbe\xd0\xb2\xc9\xec\x07\x0c\x04\xdb\x10h\xf4\x81\x95\xb8.\xedL;\x02m,\xa8\xf5\x1cu\x9f\xd5gP2\x8f_\x08\x86,\xb1R\x1e\x18\x96X\x1dmta\x01\n\xac<\xcb\xe6\xf1C\xd9\xe0\xc2\xc3#\xd3F\xc1m\xe2\xa2\xbc<\x13\xed\x9e\x8a\xe4Y\x9cI$\x9e7\xca\x06\x84\xc9\x16\x92\x89`\x13\xfap\x07M\xb5\x04\x06\xf1\x9eT\x04\x03+\xcf\xb2\x99M(c\xaay\xf2L\x08\rp\xe4N\xc6U\x86\x866\xdc\xf6\x9e\x94`\x88\xe4\xe4\xd9(*IY\xcdLG\xe9\xb2\x93R\xb9_Y3m\xa1$9\x9dO\x84g6rE\x8b\xf1$(Q\x91\x9c \x9e\r0\xa2]aW\xd81\x08\xddXa\x97\x0f-\x04\xc7\xaf\xd5jb_\\\x9e\xfc\xf8\xb0\xef\xb9Tk\xc2\xd3s\xab\x93\x1f!\xda\xc5JM\xc5\xd3\x0f\xaa\xdb\xf0+`\x15|\xc7\xef\xbc\xfdo\x90N_\xb9O\xfe\xea%\x9a\xf1\xc5\xbf2\xe4+\x03\xd1\x96\xb0\t=\x05\xb3\xe0?\xdez\xff\x03x$v\xf3\xb9\xb7y\xe5\xaf\xeb`\x8bi\xcc\x9c\xbe\x187\xfb\x81\xde\xf9\xd7\x98\xc3,\xdc\xadK\r\xd1}!\xdc\xe7\xc3z\x19\xbc\xa2\x1b\x93_\x7f3\x0fv\xebm|\xf9\xda\xc5\x1d\xf4\xd6\xee\x1a\xff\x89\x1f\xed*\x08/\x82\xed<xJ\x08H\xd9\xf7\xa7\xdf\xb1M\xfc\xef\xf5\xfb\xf3o\xdf\xc8E\x17\x8f\xd2\xbb\xd0[\xf8\xdbw)\xae%\xfcp\xdf@\xfc\x157|\x17\x06\x9b\xcd\xd4[\xad.\xd7\xee\xd7\x95\xc7\xdd}\x89\x7f?\x14\xdd\xbf\x7f\x80\xbf\xdcg\xffw,W#\xd6KP\xc6ol\x80~\x03(\xa2\x87W~\xb8\xd9\x92\xd7\xfb\xd5\xea\x85\x10\x90\xa8\xf1\x10\xdf\xb5\xf8\xe4}\xc7\rnR\x9d|m\xd6s\xc3\xd5\xcb\xb9\x1f.\xf2\x9e\x0e\x03\xf7\xe3e\x12<\x06\xbb\xed\xeb%\xf7\xe5\xce]q\x00,w\xeb\xc5\x86\xb9\xf6\xf3\xe7\xff\x019\xe0\x9f\x14\x18\x06\x01\x00'
babehboi commented 6 months ago

Hi @redfern314 ,

Have you looked at https://github.com/jdholtz/auto-southwest-check-in/ to pull the header information?

tdrummond91 commented 1 week ago

CMD line returns 'success' because the code is coded to catch HTTP request errors (403, 500, etc.).

I believe the issue is with CORS, and unless you are on the website and on the debugging console running JS it won't work. I have read up on a few options and there may be a way to use Node.JS to get past the CORS issue.

redfern314 commented 1 week ago

Hey folks - appreciate all the input here.

I'm going to archive this repository. Any of you are welcome to fork and revive it, using whatever method you think will work; it's MIT-licensed so go wild. However, the main complaints I had when I originally made this have been resolved:

Personally, I don't have much use for a tool that runs locally and breaks frequently, when I can just go on Google Flights instead :).