Télechargement code source page externe avec des $_POST

neamar Messages postés 26 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 12 avril 2009 - 3 juil. 2007 à 21:59
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 - 4 juil. 2007 à 14:26
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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
3 juil. 2007 à 23:13
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
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
3 juil. 2007 à 23:51
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á
0
neamar Messages postés 26 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
4 juil. 2007 à 12:19
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 ?)
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
4 juil. 2007 à 14:26
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á
0
Rejoignez-nous