Bad Request. La connexion à des sites via curl sur l'hôte et le système de
J'ai cette cURL
code en php.
curl_setopt($ch, CURLOPT_URL, trim("http://stackoverflow.com/questions/tagged/java"));
curl_setopt($ch, CURLOPT_PORT, 80); //ignore explicit setting of port 80
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_HTTPHEADER, $v);
curl_setopt($ch, CURLOPT_VERBOSE, true);
Le contenu de HTTPHEADER
;
Proxy-Connection: Close
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1017.2 Safari/535.19
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __qca=blabla
Connection: Close
Chacun d'entre eux les différents éléments dans le tableau $v
.
Quand je télécharge le fichier sur mon hôte, et d'exécuter le code, ce que je reçois est :
400 Bad request
Votre navigateur a envoyé une demande non valide.
Mais quand je le lance sur mon système à l'aide de PHP en ligne de commande, ce que je reçois est
< HTTP/1.1 200 OK
< Vary: Accept-Encoding
< Cache-Control: private
< Content-Type: text/html; charset=utf-8
< Content-Encoding: gzip
< Date: Sat, 03 Mar 2012 21:50:17 GMT
< Connection: close
< Set-Cookie: buncha cokkies; path=/; HttpOnly
< Content-Length: 22151
<
* Closing connection #0
.
Ce n'est pas seulement sur stackoverflow, ce qui se passe, ça se passe aussi sur 4shared, mais fonctionne sur google et les autres.
Merci pour toute aide.
quel est le résultat de la suppression
Autres code PHP s'exécute ok?
Le navigateur télécharge la page web dans un
Oui, il fonctionne ok.
curl_setopt($ch, CURLOPT_ENCODING, "");
Autres code PHP s'exécute ok?
Le navigateur télécharge la page web dans un
.gz
fichier. Il ne s'affiche pas. Juste téléchargements.Oui, il fonctionne ok.
OriginalL'auteur Blank | 2012-03-03
Vous devez vous connecter pour publier un commentaire.
C'est plus un commentaire qu'une réponse: votre question, on ne sait pas précisément ce qui déclenche l'erreur 400, ni ce que signifie en particulier qu'il ou plus concret: la source de celui-ci.
Est que la sortie par votre serveur? Est que certains commentaires (le curl réponse) que vous sortez avec votre script?
Pour mieux déboguer les choses, je suis venu avec une forme légèrement différente de la configuration, vous pourriez être intéressé lors de l'utilisation de l'extension curl. Il y a une belle fonction appelée
curl_setopt_array
qui vous permet de définir plusieurs options à la fois. Il retournera false si l'une des options échoue. Il vous permet de configurer votre demande complète à l'avant. De sorte que vous pouvez plus facilement injecter et de le remplacer avec un deuxième (debug) configuration:Cela pourrait vous aider à améliorer le code et le débogage des choses.
En outre, vous êtes faisant usage de la
CURLOPT_VERBOSE
option. Cela permettra de mettre les informations détaillées dansSTDERR
- de sorte que vous ne pouvez pas le suivre plus longtemps. Au lieu de cela, vous pouvez l'ajouter à la sortie de manière à mieux voir ce qui se passe:Qui donne en quelque sorte le résultat suivant:
Qui devrait vous fournir les informations nécessaires pour suivre les choses vers le bas si ils sont demande/curl liés. Vous pouvez facilement changer les paramètres et voir si cela fait une différence. Comparez également les curl version que vous avez installé en local avec le serveur. Pour l'obtenir, utiliser
curl_version
:Espère que cela vous aide à suivre les choses vers le bas.
OriginalL'auteur hakre
selon http://php.net/manual/en/function.curl-setopt.php
essayez de définir
CURLOPT_ENCODING
à"gzip"
aussi, je voudrais essayer d'éviter autant de lignes d'en-tête que possible, par exemple, utiliser
CURLOPT_COOKIE
au lieu deCookie: __qca__=blabla
ouCURLOPT_USERAGENT
EDIT: il semble que vous n'êtes pas à l'aide d'un tableau (clé => valeur) pour CURLOPT_HTTPHEADER, êtes-vous? dans ce cas, utilisez le tableau et les autres trucs, j'ai écrit, vous serez amende. (comment cela est fait, lire le manuel :P)
espère que ça aide.
OriginalL'auteur Stefan