php - cURL problemer med Google Voice 'API'er', der kører på XAMPP/Windows 7

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger aaronpk s Google Voice API'er til at sende og modtage sms-beskeder i Google Voice. Jeg har ikke kommenteret linjen 'extension=php\_curl.dll' i php.ini og har bekræftet, at cURL fungerer. Jeg er nu fast på dette tidspunkt, og jeg fortsætter med at modtage denne fejl: [10]



  Uncaught undtagelse 'Undtagelse' med
  besked 'Kunne ikke analysere for GALX
  polet'



Jeg har kontrolleret alle de grundlæggende ting. Brugernavn og adgangskode på kontoen er korrekte. Det eneste jeg kan se er, at cURL ikke skriver cookie-filer.


Jeg ved, at scriptet har en Linux-sti til cookiejar/cookiefile som standard. Jeg har forsøgt at skifte dette til en Windows-mappe, samt at indføje den fulde sti. Kodestykket, jeg bruger i øjeblikket, er:


$this->\_cookieFile = dirname(\_\_FILE\_\_) . "cookies.txt";


Selv med denne kodeændring skriver scriptet ikke til cookies.txt-filen.


Jeg har uploadet disse scripts til en Linux-vært, og de fungerer fint, og det viser mig, at dette er et Windows-problem. Desværre har vi ikke en Linux-server til produktionsmiljøet.


Jeg leder efter vejledning for at få det til at fungere i Windows. Lige nu udvikler jeg mig på en Windows 7-maskine, der kører XAMPP. Produktionsmiljøet vil sandsynligvis være Windows 2008 Server.


Enhver hjælp ville blive meget værdsat!

Bedste reference


Jeg ved, at denne er ret gammel ... men det er stadig rart at dele et svar, ja?


Ændring af cookiefilens sti er god, men problemet her er med cURL, der forsøger (og undlader at) bekræfte google s SSL-certifikat. Der findes to løsninger her (jeg fandt det link i det accepterede svar for denne anden SO spørgsmål ) [11]


Til test formål synes jeg det ville være ok at bruge den hurtige og beskidte løsning (blindt accepterer alle SSL-certifikater uden at verificere).
Du 'd indsætter den følgende linje i GoogleVoice klasse konstruktøren sammen med de øvrige curl\_setopt linjer


curl\_setopt($this->\_ch, CURLOPT\_SSL\_VERIFYPEER, FALSE);


For produktionskode bekræfter jeg certifikatet. Find og gem certifikatet er dækket i det første link, jeg har angivet. Hvis du antager at certifikatet er i samme mappe som GoogleVoice.php, skal du indsætte følgende linjer


curl\_setopt($this->\_ch, CURLOPT\_SSL\_VERIFYPEER, TRUE);
curl\_setopt($this->\_ch, CURLOPT\_SSL\_VERIFYHOST, 2);
curl\_setopt($this->\_ch, CURLOPT\_CAINFO, getcwd().'BuiltinObjectToken-VerisignClass3PublicPrimaryCertificationAuthority.crt');


Jeg er ingen cURL-ekspert, så jeg kan ikke sige, om der er en anden måde at verificere SSL-certifikatet på (eller hvorfor det ikke er nødvendigt på en Linux-vært.) Dette skal være alt, hvad der skal ændres for at få aaronpk s Google Voice API arbejder på XAMPP

Andre referencer 1


Det lader til, at Google netop har ændret output HTML til https://accounts.google.com/ServiceLogin på en måde, der bryder aaronpk's API. Jeg observerede ændringen engang efter 8. december 2015.


Den gamle HTML: <input name="GALX" type="hidden" value="SecureTokenHere">


Den nye HTML: <input type="hidden" name="GALX" value="SecureTokenHere">


Så hvis du har fejlen Could not parse for GALX token, skal du blot opdatere din RegEx fra: /name="GALX"s*type="hidden"s*value="([^"]+)"/ til /type="hidden"s*name="GALX"s*value="([^"]+)"/ eller for kompatibilitet, skal du kontrollere den nye måde, hvis den gamle måde ikke finder en kamp.