Télechargement code source page externe avec des $_POST

Signaler
Messages postés
26
Date d'inscription
vendredi 9 septembre 2005
Statut
Membre
Dernière intervention
12 avril 2009
-
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
-
Bonjour à tous !

Voilà, je cherche un moyen de télecharger via PHP les resulats d'une recherche effectuée avec la méthode POST sur un site externe.
Par exemple, pour ce site : http://www.gutenberg.org/catalog/world/results , je souhaite récupérer avec PHP de code source résultant de la recherche.

Avec

<?php

$resultat = file_get_contents("http://www.gutenberg.org/catalog/world/results");
echo $resultat;
?>

Je n'envoie pas de variables POST dans le header, et récupère donc une page génerique sans résultats.

Si quelqu'un a une idée, ou mieux : la solution ?
Merci !

4 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
Salut

faut voir curl ou fsockopen

cherche iprelax, ou les rfc du protocol http, sinon t'as une demo ici http://www.phpcs.com/codes/BANNIR-CLASS-PHP4_33280.aspx

<hr />une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

Avec fsockopen ( methode la plus courante )

<?php
function get_html($url,$var) {
    if (strtoupper(substr($url,0,7))=="HTTP://") $url=substr($url,7);
    $p = strpos($url,"/");
    if ($p===FALSE) {
        $nom_domaine=$url;
        $get="/";
    }else {
        $nom_domaine=substr($url,0,$p);
        $get=substr($url,$p);
    }
    $errno=""; $errstr=""; $r="";
    $fp = fsockopen($nom_domaine, 80, &$errno, &$errstr, 15);
  
    $header = "Host: $nom_domaine\r\n";
    $header .= "User-Agent: PHP Script\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: ".strlen($var)."\r\n";
    $header .= "Connection: close\r\n\r\n";
  
    if($fp) {
        fputs($fp, "POST $get  HTTP/1.1\r\n");
        fputs($fp, $header.$var);
        fwrite($fp, $out);
        while (!feof($fp)) {
            $result.=fgets($fp, 128);
        }
        fclose($fp);
    }else{
        $result=$errstr;
    }
    return $result;
}
$url='http://www.gutenberg.org/catalog/world/results';
$var='author=poe&title=the raven&etextnr=';
echo get_html($url,$var);
?>

Avec Curl ( methode la plus elegante selon moi )

<?php
$URL="http://www.gutenberg.org/catalog/world/results";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"$URL");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "author=poe&title=Edgar Allan Poe's Complete Poetical Works&etextnr=");
$html=curl_exec ($ch);
curl_close ($ch);
echo $html;
?>

Ou la methode bourrine ( deconseillee mais je l aime bien :) )

$request='author=poe&title=The+Works+of+Edgar+Allan+Poe&etextnr=';
echo file_get_contents('http://www.gutenberg.org/catalog/world/results?'.$request);
?>

Vilhjálms
Sigurðsdóttir aka Frëyjá
Messages postés
26
Date d'inscription
vendredi 9 septembre 2005
Statut
Membre
Dernière intervention
12 avril 2009

Merci beaucoup !

Avec la méthode Curl , jen ne récupère qu'une partie de la page, ca s'arrête abruptement :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html lang= "en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="keywords" content="ebooks, ebook, books, book, free, online, audio">
<meta name="description" content="20000 free ebooks online">
<meta name="classification" content="public">

<link rel="stylesheet" type="text/css" href="/css/pg-002.css"> <link rel="shortcut icon" href="/favicon.ico">

<title>Search on Titles &gt; Results - Project Gutenberg</title>
</head>

<body class="IEhack">
<div class="menubar">
<div id="logo" class="logo">
<a tabindex="1" href="/wiki/Main_Page"
title="Go to Main Page"></a>
</div>

<div class="menu">
<div class="menu-group menu-group-open">
<a class="h1" tabindex="30" accesskey="1" title="Go to the online book catalog section - Accesskey=1" href="/catalog/">Online Book Catalog</a>
<span class="menusep">=&gt;</span> <form method="post" action="/catalog/world/results"
accept-charset="utf-8" enctype="multipart/form-data">
<fieldset>
<legend>Quick Search</legend>
<div>

<label accesskey="a" for="menu-author">Author:</label>
<input tabindex="20" alt="Author" type="text" size="20" value=""
maxlength="80" id="menu-author" name="author" title="Typ

C'est assez bizarre !

Avec la méthode files_get_content, c'est un autre problème, j'obtiens l'erreur failed_to_open_stream ! :
Warning : file_get_contents(=poe&title=The+Works+of+Edgar+Allan+Poe&etextnr= http://www.gutenberg.org/catalog/world/results'author=poe&title=The+Works+of+Edgar+Allan+Poe&etextnr=) [function.file-get-contents]: failed to open stream: HTTP request failed! in /mnt/139/sdb/d/3/neamar/rechercheEbook.php on line 3

Alors que si j'enlève le $request, la page se telecharge sans erreur 

Bref, il ne me reste plus que la méthode fsockopen, qui ellle fonctionne sans problème !

Merci beaucoup !

(si quelqu'un sait pk les autres ne marchent pas ?)
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

Heu pour le file_get_contents peut etre que allow_url_fopen est egale a off mais bon c est pas propre du tout comme methode alors :)

Pour curl il faudrait la conf plus avant et peut etre preciser le useragent et le buffersize mais j ai pas teste

Vilhjálms
Sigurðsdóttir aka Frëyjá