| |
|
|
Clemens Meier | Ich bin dabei, ein http-Request mit der POST-Methode zu erstellen. Eigentlich sollte es funktionieren, tut es natürlich nicht. Die Zeilen, die das Problem beinhalten sind: KompilierenMarkierenSeparierenhOpen& = InternetOpenA(addr(INET_CallerName$),opentype&,0,0,0)
print "hOpen "+str$(hOpen&)
hConnect& = InternetConnectA(hopen&,addr(server$),port%,addr(username$),addr(password$),INTERNET_SERVICE_HTTP&,0,0)
print "hConnect "+str$(hConnect&)
Die 1. Zeile funktioniert noch, es wird ein Long-Wert ausgegeben. Dieser Wert wird in die InternetConnectA Funktion übernommen. Die Variablen haben folgende Werte: hopen& = 13369348 als Beispiel, bekommen durch InternetOpenA server$ = www.einedomain.de (Diese Domain existiert) port% = 80 username$ = (ich habe es auch mit 0 versucht) passwort$ = (ich habe es auch mit 0 versucht) INTERNET_SERVICE_HTTP& = 3
Doch der Wert der zurückkommt ist 0. Eine Internetverbindung besteht. Also habe ich noch die Funktion internetGetLastResponseInfoA eingebaut, so wie es in SDK empfohlen wird. Doch die Fehlernummer ist 0 und es gibt keine Fehlermeldung.
Hat jemand eine Idee, woran es ggf. liegen könnte oder in welcher Richtung ich den Fehler suchen sollte. |
|
|
| |
|
|
|
| Ich habe Dein Posting verschoben - im Stammtisch gehts nicht um solche Programmierprobleme. Bitte nutze für Codes auch das CODE, statt das BOX - Symbol. |
|
|
| |
|
|
|
| Probier mal ein einfaches: KompilierenMarkierenSeparieren und dann KompilierenMarkierenSeparierendeclare server$,user$,pwdd$,mem#,data#
server$:="SERVERz"
user$:="USERNAMEz"
pwdd$:="PASSWORTz"
ftppfad$:="/"
dim mem#,4
long mem#,0:=12345
dim data#,318
clear data#
chdl&:=InternetConnect(ihdl&,addr(server$),21,addr(user$),addr(pwdd$),1,134217728,0)// 134217728 == 8000000 == INTERNET_FLAG_PASSIVE
dann kannst Du schauen ob Du mit KompilierenMarkierenSeparieren ein Handle bekommst.
Mein Beispiel zielt zwar nicht auf Port80 ab - aber der Titel des Threads beschreibt ja auch ein anderes Problem.
Salve. |
|
|
| |
|
|
|
Clemens Meier | Sorry, kann ich nicht ausprobieren, da ich nicht XPSE installieren kann, denn dazu müsste ich die Doku im chm-File lesen können, doch die benötigt den IE, der sich bei mir weigert etwas anzuzeigen (-> Hierzu bitte keine Kommentare, habe rund 200 Euro für einen MS-Techniker ausgegeben, der keine Lösung wußte und eine Reinstallation von Windows empfahl und durchführte, wodurch weitere Programme Schaden nahmen Gesamtschaden rund 700 Euro, dank an MS, die wissen, wie man die Wirtschaft ankurbelt)
Gibt es die XPSE-Dokumentation noch in einem anderen Format, doc? html? PDF? Oder könnte man dein Beispielcode auch im normalen XProfan laufen lassen? |
|
|
| |
|
|
|
Rolf Koch | |
|
| |
|
|
|
| Bei InternetOpenA solltest Du als OpenType& lieber 1 nehmen, nicht 0 wie in iF seinem Beispiel. Kannste ja mal testen ( 1 = INTERNET_OPEN_TYPE_DIRECT ) Ob man den Agenten einfach weglassen kann weiß ich nicht, würde ich einfach irgendwas ala: XProfan@Inet angeben |
|
|
| |
|
|
|
| Du könntest die CHM dekompilieren.
XPSE wird aber nicht installiert - lediglich aus der IDE Deiner Wahl aufgerufen - mit dem Dateinamen als Parameter. |
|
|
| |
|
|
|
Clemens Meier | Klasse, gleich so viele Antworten, aber:
Eine opentype ändert nichts. Den Agenten zu ändern bringt auch nichts, kann man auch leer lassen. Ich habe inzwischen auch ein Beispiel mit InternetOpenUrlA versucht, doch auch bei diesem kommt nur eine 0 raus. Ich schätze, es liegt weniger an dem Programm, sondern irgendetwas an meinem System könnte nicht korrekt laufen, obwohl alle DLLs wie onl.dll oder online.dll einwandfrei funktionieren. Und wenn es mit der wininet nicht klappt, muss ich einen anderen Weg suchen.
Mmh auf den Tipp die chm einfach zu dekompilieren hätte ich auch von alleine kommen können. Habe mal einen Decompiler herunter geladen. Damit wird es wohl gehen. |
|
|
| |
|
|
|
Clemens Meier | Also, am System scheint es nicht zu liegen, habe ein paar Hardware- und Softwaretools laufen lassen, die keine Fehler meldeten. Die wininet.dll ist ansprechbar und steht zur Verfügung, dennoch bekomme ich immer den Handle 0. Habe es auch mit dem FTPFindFirstFile versucht. InternetOpenA gibt seltsamerweise auch immer die gleiche Handle-Nummer zurück. Das kann auch nicht normal sein. Vielleicht hat einer von euch über Nacht noch eine Idee, hier mal der komplette Code: KompilierenMarkierenSeparierendef InternetGetLastResponseInfoA(3) !"wininet.dll","InternetGetLastResponseInfoA"
ALLGEMEINE INTERNET API-Deklarationen:
def InternetCloseHandle(1) !"wininet.dll","InternetCloseHandle"
Benötigt als Parameter hInternetHandle
def InternetConnectA(8) !"wininet.dll","InternetConnectA"
Benötigt werden:
hInternetSession als &
lpszServerName als $
nProxyPort als %
lpszUsername als $
lpszPassword als $
dwService als &
dwFlags als &
dwContext als &
def InternetOpenA(5) !"wininet.dll","InternetOpenA"
Benötigt werden:
lpszCallerName als $
dwAccessType als &
lpszProxyName als $
lpszProxyBypass als $
dwFlags als &
def InternetReadFile(4) !"wininet.dll","InternetReadFile"
Benötigt werden:
hFile als &
sBuffer als $
lNumBytesToRead als &
Bytes als &
def &INTERNET_FLAG_RELOAD $80000000
def &INTERNET_SERVICE_HTTP 3
HTTP API-Deklarationen:
def HttpAddRequestHeadersA(4) !"wininet.dll","HttpAddRequestHeadersA"
Benötigt werden:
hHttpRequest als &
sHeaders als $
lHeadersLength als &
lModifiers als &
def HttpOpenRequestA(8) !"wininet.dll","HttpOpenRequestA"
Benötigt werden:
hInternetSession als &
lpszVerb als $
lpszObjectName als $
lpszVersion als $
lpszReferer als $
lpszAcceptTypes als &
dwFlags als &
dwContext als &
def HttpSendRequestA(5) !"wininet.dll","HttpSendRequestA"
Benötigt werden:
hHttpRequest als &
sHeaders als $
lHeadersLength als &
sOptional als $
lOptionalLength als &
declare HTTP_ADDREQ_FLAG_ADD&
declare HTTP_ADDREQ_FLAG_REPLACE&
declare INET_CallerName$
declare INET_ContentType$
declare IOTPreconfig%
declare IOTDirect%
declare IOTProxy%
declare INTERNET_FLAG_RELOAD&
declare INTERNET_SERVICE_HTTP&
HTTP_ADDREQ_FLAG_ADD& = $20000000
HTTP_ADDREQ_FLAG_REPLACE& = $80000000
INET_CallerName$ = "Testzugriff"
INET_ContentType$ = "Content-Type: application/x-www-form-urlencoded
"
IOTPreconfig% = 0
IOTDirect% = 1
IOTProxy% = 3
INTERNET_FLAG_RELOAD& = $80000000
INTERNET_SERVICE_HTTP& = 3
declare string$,url$,data$
Proc HttpPost
Aufruf
Parameters url$,data$,opentype&,port%,username$,password$
Declare server$,path$,hOpen&,hConnect&,hRequest&,Buffer#,Bytes&,i&,ende%,httppost$
declare errorbuffer#,error&
DIM Buffer#,2048
DIM errorbuffer#,2048
url$ = trim$(url$)
if (lower$(left$(url$,7)) = "https://")
url$ = right$(url$,len(url$)-7)
endif
i& = InStr("/",url$)
if (i& > 0)
server$ = left$(url$,i&-1)
path$ = right$(url$,len(url$)-i&+1)
else
server$ = url$
path$ = "/"
endif
print "Server: "+server$
print "Pfad: "+path$
hOpen& = InternetOpenA(addr(INET_CallerName$),opentype&,0,0,0)
print "hOpen "+str$(hOpen&)
hConnect& = InternetConnectA(hopen&,addr(server$),port%,addr(username$),addr(password$),INTERNET_SERVICE_HTTP&,0,0)
print "hConnect "+str$(hConnect&)
hRequest& = HttpOpenRequestA(hConnect&,"POST",addr(path$),"HTTP/1.0",0,0,INTERNET_FLAG_RELOAD&,0)
print "hRequest "+str$(hRequest&)
if (hRequest& = 0)
InternetGetLastResponseInfoA(addr(error&),addr(errorbuffer#),sizeof(errorbuffer#))
print str$(error&)
print "Info: "+string$(errorbuffer#,0)
waitinput
dispose buffer#
dispose errorbuffer#
end
endif
Header
HttpAddRequestHeadersA(hRequest&,addr(INET_ContentType$),len(INET_ContentType$),HTTP_ADDREQ_FLAG_REPLACE& | HTTP_ADDREQ_FLAG_ADD&)
HttpSendRequestA(hRequest&,0,0,addr(data$),len(data$))
ende% = 1
repeat
print "a"
InternetReadFile(hRequest&,addr(buffer#),sizeof(buffer#),addr(Bytes&))
if (bytes& = 0)
ende% = 0
else
httppost$ = char$(buffer#,0,bytes&)
endif
until ende% = 0
InternetCloseHandle(hRequest&)
InternetCloseHandle(hConnect&)
InternetCloseHandle(hOpen&)
dispose buffer#
dispose errorbuffer#
return httppost$
endproc
CLS
url$ = "https://www.colored-web.com/httppost/index.php"
data$ = "X=15&Y=29"
string$ = HttpPOST(url$,data$,1,80,"","")
print string$
waitinput
end
|
|
|
| |
|
|
|
Rolf Koch | Hi, hab hin und her getestet. Die Bruchstücke Code von iF sind mir bekannt, da wir damals zusammen darüber gesprochen hatten.
iFs Code war im Prinzip identisch aber er lief im Gegensatz zu Deinem (also baute eine FTP Verbindung auf und listete Daten auf).
Kann es sein, dass irgendwie der Server dies all nicht so mag? |
|
|
| |
|
|
|
Clemens Meier | Nee, am Server scheint es nicht zu liegen, habe es eben mit zwei weiteren Servern an verschiedenen Standorten probiert, doch auch bei denen kommt immer exakt das gleiche Ergebnis raus.
Hat vielleicht irgendjemand ein funktionierende Prog mit InternetOpenA also mit Api-Funktionen aus der wininet.dll, die ich dann bei mir mal ausprobieren kann? |
|
|
| |
|
|
|
| Hab ich oben gepostet? |
|
|
| |
|
|