2016-10-06 5 views
1

Ich habe versucht, beide Lösungen here gefunden, aber es scheint mir nicht bildenSenden post-Daten via PHP file_get_contents funktioniert nicht

meine Anfrage wie diese bauen zu arbeiten:

<?php 
class RequestObject { 
    public $p1 = 1; 
    public $p2 = 2; 
} 
$requestObject = new RequestObject(); 

$requestString = http_build_query($requestObject); 
    // ^^ returns 'p1=1&p2=2' 

// $requestUrl = "http://address/api?fn=li_con"; // old with failure response 
$requestUrl = "http://address/api/?fn=li_con"; 
$requestParameters = array(
    "http" => array(
     "method" => "POST", 
     "header" => "Content-type: application/x-www-form-urlencoded", 
     "content" => $requestString 
    ) 
); 
$streamContext = stream_context_create($requestParameters); 
$result = file_get_contents($requestUrl, false, $streamContext); 
echo "$result"; 

meine api ermöglicht eine einfache Antwort Post und erhalten Array als json string:

<?php 
switch(filter_input(INPUT_GET, 'fn')) { 
    case 'li_con' : 
     echo json_encode(array($_POST, $_GET)); 
     break; 
    default: 
     echo "action not found"; 

} 

alles, was ich zurück erhalten, ist diese Saite:

[[],{"fn":"li_con"}] 

also, was ist los? Warum bekomme ich die post-Parameter nicht in meiner API?

+1

Ich kann nicht reproduzieren. Der Fehler muss woanders liegen. Ist das der genaue Code, den Sie testen? –

+0

Es ist möglich, dass php.ini die Fähigkeit für 'file_get_contents()' deaktiviert, von einer URL zu lesen. Wenn Sie Probleme damit haben, prüfen Sie, ob dies der Fall ist. Wenn Sie planen, dass Ihr Code auf unbekannten PHP-Servern verwendet wird, sollten Sie sich darüber im Klaren sein, dass diese Konfigurationseinstellung möglicherweise nicht geändert werden kann. Wenn dies bedeutet, dass Sie 'file_get_contents()' nicht verwenden können, sollten Sie stattdessen Curl verwenden. Es ist mehr Code, aber im Allgemeinen kompatibler. Eine weitere Option ist eine Drittanbieter-Bibliothek wie Guzzle. – Simba

+0

danke für alle Kommentare. Der Fehler war ein fehlender Schrägstrich in der angeforderten URL. der richtige muss sein '' 'http: // adresse/api /? fn = li_con' '' – mtizziani

Antwort

1

Ein kleiner Fehler: ; in Zeile echo "action not found" hinzufügen. Es gab mir Fehler beim Testen.

Abgesehen davon funktioniert es in meinen lokalen Tests gut. Ich PHP-Entwicklungsserver verwendet, und hier ist mein Ergebnis (I entfernt div Tag):

[{"p1":"1","p2":"2"},{"fn":"li_con"}] 

Ich bin mit Arch Linux mit PHP 7.0.10. Vielleicht stimmt mit Ihrer Umgebung etwas nicht? Bitte erwähnen Sie die PHP-Version, den Webserver und dessen Konfiguration und wie Sie Ihr Client-Skript testen.

+0

danke, der; war ein Tippfehler. aber der Fehler war eine fehlende/in der angeforderten URL. So funktioniert es jetzt – mtizziani

Verwandte Themen