Come utilizzare curl per ottenere una richiesta GET, esattamente come se si stesse utilizzando Chrome?

Ho una web api http://something.com/api e voglio usare il corpo della risposta.

Questo è il mio comando:

curl "http://something.com/api"

Naturalmente, non riesce e dà un messaggio di errore.

Quando uso Chrome e digitare l’url precedente, tutto corretto. Tuttavia faccio le stesse cose con Firefox, l’url mi da lo stesso messaggio di errore. Provo a ripetere l’azione con estensione di google Chrome DHC, la richiesta dà la risposta corretta di nuovo. Dopo qualche ricerca, credo che il curl opzione --user-agent fa la differenza. Qual è il modo corretto per impostare l’user agent per Chrome? O non è questo il punto, il problema viene da altri campi? Ringrazio molto.

InformationsquelleAutor wdetac | 2015-02-27

 

3 Replies
  1. 92

    Se avete bisogno di impostare l’intestazione della richiesta riccio, è possibile utilizzare il -H opzione per impostare l’user agent come:

    curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome
    

    Utilizzando un proxy come strumento di Charles Proxy aiuta davvero fare il lavoro a breve di qualcosa di simile a quello che si sta chiedendo. Qui è quello che faccio, che utilizza questo MODO pagina come esempio (luglio 2015 Charles versione 3.10):

    1. Ottenere Charles Proxy, in esecuzione
    2. Fare richiesta web utilizzando il browser
    3. Trovare desiderato richiesta di Charles Proxy
    4. Fare clic destro su richiesta Charles Proxy
    5. Selezionare “Copia Richiesta riccio’

    Come utilizzare curl per ottenere una richiesta GET, esattamente come se si stesse utilizzando Chrome?

    Ora hai una richiesta riccio è possibile eseguire in un terminale che rispecchierà la richiesta del tuo browser fatto. Qui è che cosa la mia richiesta per questa pagina sembrava (con intestazione cookie rimossi):

    curl -H "Host: stackoverflow.com" -H "Cache-Control: max-age=0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" -H "HTTPS: 1" -H "DNT: 1" -H "Referer: https://www.google.com/" -H "Accept-Language: en-US,en;q=0.8,en-GB;q=0.6,es;q=0.4" -H "If-Modified-Since: Thu, 23 Jul 2015 20:31:28 GMT" --compressed http://stackoverflow.com/questions/28760694/how-to-use-curl-to-get-a-get-request-exactly-same-as-using-chrome
    
    • Grazie, curl -H funziona come un fascino!
    • Sarebbe molto meglio se Charles supporta la copia/esportazione di più cURL richieste in un colpo solo
    • Alcune Api, come ArcGIS, si limitano a rispettare la Accept: text/html intestazione per forzare l’output HTML.
    • curl-Un agent_name è un taglio corto
  2. 16

    Aprire Chrome Developer Tools, vai alla scheda di Rete, fai la tua richiesta (potrebbe essere necessario controllare “Preserve Log” se il refresh di pagina). Trovare la richiesta sulla sinistra, fare clic destro “Copia come cURL”.

  3. 4

    Controllare le intestazioni HTTP che il browser chrome è l’invio con la richiesta (Utilizzando l’estensione per il browser o proxy) quindi provare a inviare lo stesso intestazioni con CURL – Possibilmente uno alla volta fino a capire quale intestazione(s) effettua la richiesta di lavoro.

    curl-Un [user-agent] -H [header] “http://something.com/api

    • Io non sono a conoscenza di esso. Mi potete dare alcuni esempi reali per impostazione user-agent per chrome e possibile intestazioni?

Lascia un commento