Hallo,
ich stehe derzeit leider vor dem Problem, eine PHP-API-Ansprache, diese nutzt CURL entsprechend in PHP ohne CURL umzusetzten.
Bei der API handelt es sich um ein Robot-System mit entsprechender Rückgabe, die Auswertung der Rückgabe ist aber nicht Bestandteil dieser Frage, da ich diese Verarbeitung zu einem späterem Zeitpunkt benötige und hierfür eine bereits funktionierende Lösung über regexp erstellt habe.
Die Robotansprache erfolgt über POST.
Folgend der Code mit CURL:
Die abc.php:
Mein Versuch die Umsetzung zu realisieren mit dem Code:
schlug fehl, da offensichtlich nicht die Array korrekt gepostet werden, wobei ich zugestehen muß, das ich diese Umsetzung aufgrund eines mir vorliegenden PEARL-Scriptes gemacht habe (PEARL kann ich aber auch nicht verwenden, sonst würde ich das machen...).
Ich hoffe das mir jemand hierbei helfen kann.
Gruss
Mofu
ich stehe derzeit leider vor dem Problem, eine PHP-API-Ansprache, diese nutzt CURL entsprechend in PHP ohne CURL umzusetzten.
Bei der API handelt es sich um ein Robot-System mit entsprechender Rückgabe, die Auswertung der Rückgabe ist aber nicht Bestandteil dieser Frage, da ich diese Verarbeitung zu einem späterem Zeitpunkt benötige und hierfür eine bereits funktionierende Lösung über regexp erstellt habe.
Die Robotansprache erfolgt über POST.
Folgend der Code mit CURL:
PHP:
include "abc.php";
$adns = new zzz( "http://zieladresse" );
$user = "abc";
$pass = "cba";
$context = "context";
$request = array(
"auth" => array(
"user" => $user,
"password" => $pass,
"context" => $context
),
"task" => array(
"demo" => "1",
"code" => "0101"
)
);
$result = $adns->request( $request );
print_r( $result );
Die abc.php:
PHP:
set_time_limit( 0 );
class zzz {
var $host;
var $port;
var $request;
var $reply;
var $status;
var $error;
function zzz( $host, $port=4569 ) {
$this->host = $host;
$this->port = $port;
}
function setError( $error, $value ) {
$this->error = $error.$value;
}
function request( $data ) {
global $user_data;
$data[auth][user] = ( $data[auth][user] ? $data[auth][user] : $user_data[user][user] );
$data[auth][password] = ( $data[auth][password] ? $data[auth][password] : $user_data[password] );
$data[auth][context] = ( $data[auth][context] ? $data[auth][context] : $user_data[user][context] );
return unserialize( $this->requestCurl( serialize($data) ) );
$this->request = $data;
$this->_get_messages( $this->reply[result][msg] );
if( !$this->_check_status( $this->reply[result][status] )) {
return FALSE;
}
return $this->reply[data];
}
function requestCurl( $data_str ) {
if( !$ch = curl_init( $this->host )) {
$this->setError( "Connection Error.", "Es konnte keine Verbindung hergestellt werden" );
return FALSE;
}
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data_str );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0" );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
if( !$data = curl_exec( $ch )) {
$this->setError( "Curl execusion error.", curl_error( $ch ));
return FALSE;
}
curl_close( $ch );
return $data;
}
}
function getmicrotime() {
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
Mein Versuch die Umsetzung zu realisieren mit dem Code:
PHP:
function PostIt($host, $path, $referer, $data_to_send) {
$fp = fsockopen($host, 80);
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: text\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp)) {
$res .= fgets($fp, 128);
}
fclose($fp);
return $res;
}
$data = array(
"auth" => array(
"user" => $user;
"password" => $pass,
"context" => $context
),
"task" => array(
"demo" => "1",
"code" => "0101"
)
);
$x = PostIt(
"www.zieladresse.de",
"/zielscript.pl",
"PHP-Script",
$data
);
Ich hoffe das mir jemand hierbei helfen kann.
Gruss
Mofu
Zuletzt bearbeitet: