cURL request fungerar inte utan User-Agent

Permalänk

cURL request fungerar inte utan User-Agent

Hej,

Har ett problem när jag kallar på mitt API (byggt i PHP) med cURL.
För att jag inte ska få 406 Not Acceptable behöver jag lägga till User-Agent i min HTTPHEADER, se nedan.

curl_setopt_array($curl, array( ... CURLOPT_POSTFIELDS => $postfield, CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36" )

Vad är best practice att göra här? Vilken user-agent ska jag sätta in?
Det mitt request ska göra är att få tillbaka en JWT-token för att kunna logga in på min sida.

Sidofråga:
Kan jag få curl-resultatet att bli false om API:et inte returnerar statuskod 200?

Permalänk
Medlem

Gissar på att den gissar returtyp baserat på att du påstår dig vara en webbläsares. En "Accept" med önskar typ borde göra susen: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Acc....

Visa signatur

WS: Fractal Design Pop Silent | Seasonic Prime G12 GC 550W | Gigabyte B650 Eagle AX | Ryzen 7 7700 | Corsair 64GB DDR5 | Intel Arc B580 Limited Edition | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 4 | 8GB RAM | HDD 750GB | Arch Linux (armv7h)

Permalänk

@cfw:

Har jag förstått dig rätt om jag gör såhär?

curl_setopt_array($curl, array( ... CURLOPT_POSTFIELDS => $postfield, CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "Accept: application/json" )

Eller är det i APIet som denna header ska sättas?

Något att tillägga är dock att detta funkar om man kör API och Klient på samma host.
Jag kallar för tillfället på APIet (som ligger på ett webbhotell) från min lokala xampp-server, då funkar det inte.
Skulle jag däremot köra båda på samma webbhotell fungerar det.

Permalänk
Medlem

Host-headern är ofta den enda headern man behöver sätta. Om servern kör flera sajter är det nödvändigt att sätta den för att servern ska veta vilken sajt den ska gå mot. Oklart om det är det problemet du har dock, det verkar ju skumt att det börjar funka när du lägger till User-Agent. Som klient till ett egenbyggt API kan du normalt skicka vilken User-Agent du vill, men det är inte omöjligt att PHP har några egna hyss för sig.

Permalänk
Medlem
Skrivet av Anglaborg:

@[vEX]:

Har jag förstått dig rätt om jag gör såhär?

curl_setopt_array($curl, array( ... CURLOPT_POSTFIELDS => $postfield, CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "Accept: application/json" )

Eller är det i APIet som denna header ska sättas?

Något att tillägga är dock att detta funkar om man kör API och Klient på samma host.
Jag kallar för tillfället på APIet (som ligger på ett webbhotell) från min lokala xampp-server, då funkar det inte.
Skulle jag däremot köra båda på samma webbhotell fungerar det.

Ja precis, då talar du om för servern vilket format du accepterar svaret i. Men som @KAD var inne på, du behöver nog sätta host mot ditt webbhotell.

Visa signatur

WS: Fractal Design Pop Silent | Seasonic Prime G12 GC 550W | Gigabyte B650 Eagle AX | Ryzen 7 7700 | Corsair 64GB DDR5 | Intel Arc B580 Limited Edition | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 4 | 8GB RAM | HDD 750GB | Arch Linux (armv7h)

Permalänk

@KAD:
@cfw:

Min HTTPHEADER i min request ser nu ut så här:

CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "Accept: application/json", "Host: api.webbhotell.se" )

Dock fortfarande samma problem.
Har testat kalla på APIet med Postman och där fungerar det sålänge jag har User-Agent (PostmanRuntime...).

Permalänk

@KAD:
@cfw:

Update:
Problemet löst! Felet berodde på webbhotellets brandväg som tog min request som en attack/spam.
La min IP-adress i vitlistan, ingen mer 406!

Tack för era svar!