Hi,
thanks! I found several GET method solutions in the forum here, e.g. yours. But I need the POST, too.
The PHP Script on the server side reads the the data from the $_POST variable, so the $_GET is unset and it will not work. I can't modify the server script because it's not mine. I'll need a PB solution that supports HTTP POST.
I found this working php script solution that is based on socket connections. I hope to get it to work in PB, if no other PB solution exists.
Code: Select all
<?php
$timeout = 100; // Max time for stablish the conection
$size = 0; // Bytes will be read (and display). 0 for read all
$server = 'x.x.x.x'; // IP address
$host = 'test.com'; // Domain name
$target = '/post_or_get.php'; // Specific program
$referer = 'http://any.referer/'; // Referer
$port = 80;
// Setup an array of fields to get with then create the get string
$gets="";
//$gets = array ( 'get_field_1' => 'somevalue',
// 'get_field_2' => 'somevalue' );
// Setup an array of fields to post with then create the post string
$posts = array ( 'post_field_1' => 'somevalue',
'post_field_2' => 'somevalue' );
// That's all. Now the program proccess $repeat times
$method = "GET";
if ( is_array( $gets ) ) {
$getValues = '?';
foreach( $gets AS $name => $value ){
$getValues .= urlencode( $name ) . "=" . urlencode( $value ) . '&';
}
$getValues = substr( $getValues, 0, -1 );
} else {
$getValues = '';
}
if ( is_array( $posts ) ) {
$postValues="";
foreach( $posts AS $name => $value ){
$postValues .= urlencode( $name ) . "=" . urlencode( $value ) . '&';
}
$postValues = substr( $postValues, 0, -1 );
$method = "POST";
} else {
$postValues = '';
}
$request = "$method $target$getValues HTTP/1.1\r\n";
$request .= "Host: $host\r\n";
$request .= 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) ';
$request .= "Gecko/20021204\r\n";
$request .= 'Accept: text/xml,application/xml,application/xhtml+xml,';
$request .= 'text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,';
$request .= "image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n";
$request .= "Accept-Language: en-us, en;q=0.50\r\n";
$request .= "Accept-Encoding: gzip, deflate, compress;q=0.9\r\n";
$request .= "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n";
$request .= "Keep-Alive: 300\r\n";
$request .= "Connection: keep-alive\r\n";
$request .= "Referer: $referer\r\n";
$request .= "Cache-Control: max-age=0\r\n";
if ( $method == "POST" ) {
$lenght = strlen( $postValues );
$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$request .= "Content-Length: $lenght\r\n";
$request .= "\r\n";
$request .= $postValues;
}
for ( $i = 0; $i < $repeat; $i++ ) {
$socket = fsockopen( $server, $port, $errno, $errstr, $timeout );
fputs( $socket, $request );
if ( $size > 0 ) {
$ret = fgets( $socket, $size );
} else {
$ret = '';
while ( !feof( $socket ) ) {
$ret .= fgets( $socket, 4096 );
}
}
fclose( $socket );
}
?>
This one is easy to understand. Does PB internally supports Socket Connections or could this only done by Win API?
I remember a post here in the forum where the EOF was tricky. Is this a unsolved problem in PB?
Some server use GZIP compression for content. Is something like
GZIPdeflate() supported in PB?