HTTP-Post aufruf

LOK

Mitglied
Hallo @ll,

ich möchte Daten per POST-Request aus VB an ein Server senden...

einfach eine Seite per Winsock aufrufen habe ich schon geschafft:
Code:
Private Sub Form_Load()
Winsock1.Connect "-SERVER-", 80
End Sub


Private Sub Winsock1_Connect()
Dim databuffer As String
databuffer = "GET /index.htm HTTP/1.1" & vbCrLf & _
             "Host: www.hdgdl.net" & vbCrLf & _
             "Accept: */*" & vbCrLf & _
             "Connection: Close" & vbCrLf & vbCrLf

Winsock1.SendData databuffer
End Sub


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim buffer As String
    Dim dummy As String
    Dim Header As String
    Dim pos As Long

On Error Resume Next

    Winsock1.PeekData dummy, vbString

    'Sucht das Ende des Headers
    pos = InStr(1, dummy, vbCrLf & vbCrLf)

    'Bis zum Ende des Headers werden die Daten als String ausgelesen
    Winsock1.GetData Header, vbString, pos + 3

    'Der Rest wird binär ausgelesen
    'Winsock1.GetData buffer, vbByte
    Winsock1.GetData buffer, vbString
    
    
    t = MsgBox(Header, vbOKOnly, "header")
    t = MsgBox(buffer, vbOKOnly, "buffer")
End Sub


jetzt möchte ich aber wie gesagt ein Post-Request senden...
die Syntax in PHP lautet dazu
PHP:
<?php

function PostToHost($host, $path, $referer, $data_to_send) {
  $fp = fsockopen($host, 80);
  printf("Open!\n");
  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: application/x-www-form-urlencoded\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);
  }
  printf("Done!\n");
  fclose($fp);

  return $res;
}

$data = "pid=14&poll_vote_number=2";

printf("Go!\n");
$x = PostToHost(
              "www.linux.com",
              "/polls/index.phtml",
              "http://www.linux.com/polls/index.phtml?pid=14",
              $data
);


und bei Dateien so:

PHP:
<?php

// Andreas Bohne-Lang / a.bohne@dkfz.de / 22.10.2001 / GPL
// Ergaenzt: 19.9.2003

function PostToHost($host, $port, $path, $referer, $data_to_send)
{
     $dc = 0;
     $bo="-----------------------------305242850528394";

     $fp = fsockopen($host, $port, $errno, $errstr);
     if (!$fp) {
         echo "errno: $errno \n";
         echo "errstr: $errstr\n";
         return $result;
     }

     fputs($fp, "POST $path HTTP/1.0\n");
     fputs($fp, "Host: $host\n");
     fputs($fp, "Referer: $referer\n");
     fputs($fp, "User-Agent: Mozilla/4.05C-SGI [en] (X11; I; IRIX 6.5 IP22)\n");
     fputs($fp, "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*\n");
     fputs($fp, "Accept-Charset: iso-8859-1,*,utf-8\n");
     fputs($fp, "Content-type: multipart/form-data; boundary=$bo\n");

     foreach($data_to_send as $key=>$val) {
         $ds =sprintf("--%s\nContent-Disposition: form-data; name=\"%s\"\n\n%s\n", $bo, $key, $val);
         $dc += strlen($ds);
     }
     $dc += strlen($bo)+3;
     fputs($fp, "Content-length: $dc \n");
     fputs($fp, "\n");

     foreach($data_to_send as $key=>$val) {
         $ds =sprintf("--%s\nContent-Disposition: form-data; name=\"%s\"\n\n%s\n", $bo, $key, $val);
         fputs($fp, $ds );
     }
     $ds = "--".$bo."--\n";
     fputs($fp, $ds);

     while(!feof($fp)) {
         $res .= fread($fp, 1);
     }
     fclose($fp);

     return $res;
}

// Fuer eine ASCII-Datei kann man es so machen
// bei bin-Daten ueber fread gehen

$fa = @file("http://www.dkfz.de/spec/fix/file.pdb");

// Konkretes Beispiel - Eine Chemie-Datei
$xf="Content-Type: chemical/x-pdb\n\n". implode("", $fa);

$data["disk"]            = "on";
$data["file\"; filename=\"irgendwas.pdb"]        = $xf;
$data["smiles"]          = "";
$data["hadd"]            = "add";
$data["aroresolver"]     = "on";
$data["format"]          = "gif";
$data["interlace"]       = "1";
$data["width"]           = "600";
$data["height"]          = "400";
$data["atomcolor"]       = "Black";
$data["asymbol"]         = "xsymbol";
$data["hcolor"]          = "";
$data["csymbol"]         = "special";
$data["hsymbol"]         = "special";
$data["bondcolor"]       = "Black";
$data["bgcolor"]         = "White";
$data["border"]          = "12";
$data["bonds"]           = "8";
$data["wedges"]          = "1";
$data["dashes"]          = "1";
$data["crop"]            = "2";
$data["align"]           = "none";
$data["coord"]           = "0";
$data["imagemap"]        = "none";
$data["headercolor"]     = "Black";
$data["header"]          = "";
$data["footercolor"]     = "Black";
$data["footer"]          = "";
$data["commenttype"]     = "none";
$data["comment"]         = "";
$data["structure"]       = "none";

$x = PostToHost (
       "www2.chemie.uni-erlangen.de",
       80,
       "/cgi-bin/services/gifcreator.tcl",
       "http://www2.chemie.uni-erlangen.de/services/gifcreator/index.html",
       $data
      );


// Diesen Teil kann man bestimmt noch optimieren ;-)
$fp = fopen("struktur.gif", "wb");
$tok = 0;
for ($i=20; $i<strlen($x); $i++){
    if ((substr($x,$i,1)=="\n") || (substr($x,$i,1)=="\r")) {
        $tok++;
        if($tok>=3) break;
    } else {
        $tok=0;
    }
}
$i++; $i++;
printf(" %d %d %d \n", $i, strlen($x), strlen($x)-$i);
fwrite($fp, substr($x,$i,strlen($x)-$i));
fclose($fp);

$fp = fopen("struktur.xxx", "wb");
fwrite($fp, $x, strlen($x));
fclose($fp);

?>


aber ich schaffe es irgendwie nicht dies in VB umzusetzen ... kann bitte jemand so nett sein, und mir helfen dies irgendwie umzuschreiben?


Danke im Voraus

LOK
 
Wieso bindest du nicht den Explorer als unsichtbares Control auf deiner Seite ein? Einfach unter Projekt - Komponenten das Microsoft Internet Control aktivieren und auf deine Seite ziehen. In das Control kannst du ganz einfach deine Webseite laden und die Seite automatisch ausfüllen. Wäre sicher eine einfachere Lösung.


Der Doc!
 
Einfacher ja.... aber wesentlich unflexibler... und nicht wirklich sicher lauffähig...
je nach System generiert der i-frame naemlich lustige Fehler


LG

LOK
 
Zurück