Помогите разобраться в ситуации: по определенному адресу лежит php файл ну допустим так: htttp://www.blablabla.com/index.php
В этом файле - форма для ввода информации, которую можно не вводить а передать вручную. Допустим htttp://www.blablabla.com/index.php?x=2,y=2 .
После выполнения скрипта, на страницу будет выведена цифра 4 ( скрипт банально перемножил x и y ).
Вопрос как послать параметры, вроде бы ясен, хотя и без тонкостей, а вот как получить этот результат, выведенный на страницу - не понятно. Может кто подскажет идею, а если еще и код повесит - буду безмерно благодарен!
Ссылки по теме:
http://www.codenet.ru/webmast/php/HTTP-POST.php
http://www.opennet.ru/docs/RUS/perl_obzor/socket.html
http://www.softtime.ru/scripts/post_copy.php
(ничего, что для php/perl )
--
Шлешь через винсок запрос на сервер blablabla.com (порт 80 (по умолчанию)) а-ля:
' frmmain.txtwsrequest - текстбокс, в котором будет находиться готовый HTTP-запрос post (это для упрощения и наглядности. Соблюдение 13+10 (vbcrlf) обязательно.
Только во втором случае не забудь указать правильное значение content-length (можно с помощью replace).
content-len в моем втором примере будет равно 7 (Значение con-len можно узнать в ВБ с помощью len(всё после "no-cache" и двух CrLfов, т.е. только "x=2,y=2"
====================
Затем, через винсок, отправляем все что появилось в txtwsrequest.
====================
Sub WS_SendRequest()
On Error Resume Next
frmMain.txtWS = ""
With frmMain.wsMain
While .State <> sckClosed
.Close
Wend
.Connect "blablabla.com", 80
Do
DoEvents
Loop While .State <> sckConnected
.SendData frmMain.txtWSRequest
End With
End Sub
txtWS на главной форме (оба текстбокса, txtws и txtwsrequest должны быть с multiline=true - чтоб наглядней было ) будет возвращать ответ с сервера (там будет html-страничка с ответом на твое выражение. Ненужный html-код и прочую фигню можно будет обрезать с помощью Left/Mid/Right и InStr/Replace.
====================
Итак, на главной форме (frmMain) у нас:
• txtWS и txtWSRequest (желательно сделай большие, чтоб удобно все смотреть/редактировать можно было)
• винсок (wsMain)
• По желанию - кнопка, отправляющая запрос из txtWSRequest на сервер
====================
Private Sub wsMain_DataArrival(ByVal bytesTotal As Long)
Dim sData As String, tmp As String, autosend_sec As Integer
wsMain.GetData wsData
txtWS = txtWS & wsData & vbCrLf
End Sub
При получении инфы винсок будет выводить ее в txtWS.
===================
Исходники моей проги, откуда я все это взял
Может, понадобится..
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByRef hInet As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" (ByVal lpszUrl As String, ByVal dwFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function InternetAttemptConnect Lib "wininet.dll" (ByVal dwReserved As Long) As Long
вот например реализация:
Sub GetServerInfo()
Dim sBuffer As String
Dim sAgent As String
Dim hOpen As Long
Dim hFile As Long
Dim ret As Long
Dim LogonPath As String
sAgent = "VB HTTP Agent 1.0"
LogonPath = "www.ru"
sBuffer = Space(1024)
hOpen = InternetOpen(sAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hFile = InternetOpenUrl(hOpen, LogonPath, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&
InternetReadFile hFile, sBuffer, 1024, ret
InternetCloseHandle hFile
InternetCloseHandle hOpen
sBuffer = Trim(sBuffer)
End Sub