php
  • xml
  • curl
  • 2012-09-12 70 views 0 likes 
    0

    萨拉姆卷曲用POST方法

    我想从一个服务器

    得到一些XML响应,但该服务器仅接受XML请求

    我有代码

    <?php 
    
    $url = "http://www.pj.ma/phonexmlfeeds"; 
    
    $post_string = '<?xml version="1.0 encoding="UTF-8" ?><search_requests> <search_request id="req1"><content>statut=1 AND linguistic_expansion2(lingex_qui_quoi,1,0,"qui_quoi","Restaurant",LIN_EXACT|LIN_LEM0|LIN_LEM1|LIN_LEM2|LIN_SYN1|LIN_SYN2|LIN_PHO1|LIN_ORT)</content><code>sortBy(casanet_perfect(lingex_qui_quoi));filterBy(casanet_perfect_filter(lingex_qui_quoi));setSortAttribute(indice,sortDirection,sortDirectionDesc);sortBy(indice,score2(lingex_qui_quoi,lingex_ou,matrice), ordered(lingex_qui_quoi),ordered(lingex_ou),rs);catalogBy(libniv3);sendxref(rs);sendxref(crs);sendxref(nomcomm);sendxref(activite);sendxref(libniv3);sendxref(villep);sendxref(adrp);sendxref(nomvoie);sendxref(numtel_typetel);sendxref(internet);sendxref(pub);sendxref(marque);sendXrefHighlights();</code><options><option name="maxFiles">10</option><option name="startFiles">11</option><option name="highlight_zone_start">{match}</option><option name="highlight_zone_end">{/match}</option></options><metadata><meta name="base">Pages Jaunes</meta></metadata></search_request></search_requests>'; 
    
    
    $header = "POST /phonexmlfeeds HTTP/1.1"; 
    $header = "Connection: close"; 
    $header .= "Content-Type: text/xml"; 
    $header .= "User-Agent: Dalvik/1.4.0 (Linux; U; Android 2.3.3; GT-S5830 Build/GINGERBREAD)"; 
    $header .= "Host: www.pj.ma"; 
    $header .= "Content-Length: 1053"; 
    $header .= "Accept-Encoding: gzip"; 
    $header .= $post_string; 
    
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 4); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); 
    
    $data = curl_exec($ch); 
    
    if(curl_errno($ch)) 
        print curl_error($ch); 
    else 
        curl_close($ch); 
    
    echo $data; 
    
    ?> 
    

    这个例子但它给了这个回应

    您的浏览器发送了此服务器无法理解的请求。

    在这里,我通过张贴wifisnifer

    POST捕获的请求的例子/ phonexmlfeeds HTTP/1.1连接:关闭内容类型:文本/ XML 用户代理:的Dalvik/1.4.0(Linux的; U;安卓2.3.3; GT-S5830 编译/姜饼)主持人:www.pj.ma的Content-Length:1052 接受编码:gzip

    <?xml version="1.0 encoding="UTF-8" ?><search_requests> <search_request id="req1"><content>statut=1 AND linguistic_expansion2(lingex_qui_quoi,1,0,"qui_quoi","Restaurant",LIN_EXACT|LIN_LEM0|LIN_LEM1|LIN_LEM2|LIN_SYN1|LIN_SYN2|LIN_PHO1|LIN_ORT)</content><code>sortBy(casanet_perfect(lingex_qui_quoi));filterBy(casanet_perfect_filter(lingex_qui_quoi));setSortAttribute(indice,sortDirection,sortDirectionDesc);sortBy(indice,score2(lingex_qui_quoi,lingex_ou,matrice), ordered(lingex_qui_quoi),ordered(lingex_ou),rs);catalogBy(libniv3);sendxref(rs);sendxref(crs);sendxref(nomcomm);sendxref(activite);sendxref(libniv3);sendxref(villep);sendxref(adrp);sendxref(nomvoie);sendxref(numtel_typetel);sendxref(internet);sendxref(pub);sendxref(marque);sendXrefHighlights();</code><options><option name="maxFiles">10</option><option name="startFiles">1</option><option name="highlight_zone_start">{match}</option><option name="highlight_zone_end">{/match}</option></options><metadata><meta name="base">Pages Jaunes</meta></metadata></search_request></search_requests> 
    
    +0

    为什么要使用自定义标题,而不是使用'curl_setopt'? – Tchoupi

    回答

    0

    编辑THI s的线路 -

    $header .= "Connection: close"; 
    

    你have--

    $header = "Connection: close"; 
    
    +0

    我改正post_string失踪“在第一行,也在德$头=”连接:关闭“;我得到这个错误请求头字段丢失':'分隔符。 – yanddam

    2

    对于自定义页眉添加换行符(\ r \ n)的。

    或考虑使用http://us3.php.net/curl_setopt为标题,例如:

    curl_setopt($ch, CURLOPT_HTTPHEADERS, array(
        'POST /phonexmlfeeds HTTP/1.1', 
        'Connection: close', 
        'Content-Type: text/xml', 
        etc... 
        )); 
    
    相关问题