post multipart/form-data on PHPBB3 forum
Posted: Thu Apr 04, 2013 12:41 am
Hi all, i have a little problem, i want to add in my software possibility to do a forum post on PHPBB3 board, using code snipped searching in pb forum, i'm able to do login ok, open page for post new topic ok, but last step, sending form data not working, seem to not recognize the post data, sorri for my english, this are the code, please help me to do last step:
forum: labrepair.altervista.org
user: utente
password: pippone
File(upload.txt) contain Post data:
forum: labrepair.altervista.org
user: utente
password: pippone
File(upload.txt) contain Post data:
Code: Select all
-----------------------------%Boundary%
Content-Disposition: form-data; name="icon"
0
-----------------------------%Boundary%
Content-Disposition: form-data; name="subject"
%Soggetto%
-----------------------------%Boundary%
Content-Disposition: form-data; name="addbbcode20"
100
-----------------------------%Boundary%
Content-Disposition: form-data; name="message"
%Messaggio%
-----------------------------%Boundary%
Content-Disposition: form-data; name="lastclick"
%CreationTime%
-----------------------------%Boundary%
Content-Disposition: form-data; name="post"
Invia
-----------------------------%Boundary%
Content-Disposition: form-data; name="attach_sig"
on
-----------------------------%Boundary%
Content-Disposition: form-data; name="creation_time"
%CreationTime%
-----------------------------%Boundary%
Content-Disposition: form-data; name="form_token"
%Token%
-----------------------------%Boundary%
Content-Disposition: form-data; name="fileupload"; filename=""
Content-Type: application/octet-stream
-----------------------------%Boundary%
Content-Disposition: form-data; name="filecomment"
-----------------------------%Boundary%--
Code: Select all
#INTERNET_OPEN_TYPE_DIRECT = 1
#HTTP_ADDREQ_FLAG_ADD = $20000000
#HTTP_ADDREQ_FLAG_REPLACE = $80000000
#INTERNET_FLAG_SECURE = 0
#INTERNET_SERVICE_HTTP = 3
#INTERNET_DEFAULT_HTTP_PORT = 80
#HTTP_QUERY_COOKIE = 44
Global UserName.s,Password.s,SitoBase.s,Token.s,CreationTime.s,Sid.s,Host.s,PostData.s,boundary.s,get_url.s,BaseString.s
UserName="utente"
Password="pippone"
EOL.S=Chr(13)+Chr(10)
ProcedureDLL.s Mio_Between(stringa.s,stringasinistra.s,stringadestra.s); Restituisce la stringa in mezzo alla stringa sinistra e quella destra
pos1=FindString(stringa,stringasinistra,1)+Len(stringasinistra)
pos2=FindString(stringa,stringadestra,pos1)
result$=Mid(stringa,pos1,pos2-pos1)
ProcedureReturn result$
EndProcedure
Procedure.s login()
;username and password hare taken from global variable for now
; Do NOT include http:// or any other protocol indicator here
host.s ="labrepair.altervista.org"
get_url.s = "/ucp.php?mode=login"
datilogin.s="username=utente&password=pippone&login=Login&redirect=.%2Findex.php%3F"
result.s = ""
open_handle = InternetOpen_("User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0",#INTERNET_OPEN_TYPE_DIRECT,"","",0)
connect_handle = InternetConnect_(open_handle,host,#INTERNET_DEFAULT_HTTP_PORT,"","",#INTERNET_SERVICE_HTTP,0,0)
request_handle = HttpOpenRequest_(connect_handle,"POST",get_url,"","",0,#INTERNET_FLAG_SECURE,0)
headers.s = "Content-Type: application/x-www-form-urlencoded" +Chr(13)+Chr(10)
HttpAddRequestHeaders_(request_handle,headers,Len(headers), #HTTP_ADDREQ_FLAG_REPLACE | #HTTP_ADDREQ_FLAG_ADD)
post_data.s = datilogin
post_data_len = Len(post_data)
send_handle = HttpSendRequest_(request_handle,"",0,post_data,post_data_len)
buffer.s = Space(1024)
bytes_read.l
total_read.l
total_read = 0
Repeat
InternetReadFile_(request_handle,@buffer,1024,@bytes_read)
result + Left(buffer,bytes_read)
buffer = Space(1024)
Until bytes_read=0
If FindString(result,"I tuoi messaggi")
Debug "login effettuato"
Sid="&sid="+Mio_Between(result,"sid=",Chr(34))
Else
Debug "login fallito"
EndIf
ProcedureReturn result
EndProcedure
Procedure.s Nuovopost()
host.s ="labrepair.altervista.org"
get_url.s = "/posting.php?mode=post&f=2"+sid
result.s = ""
open_handle = InternetOpen_("User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0",#INTERNET_OPEN_TYPE_DIRECT,"","",0)
connect_handle = InternetConnect_(open_handle,host,#INTERNET_DEFAULT_HTTP_PORT,"","",#INTERNET_SERVICE_HTTP,0,0)
request_handle = HttpOpenRequest_(connect_handle,"POST",get_url,"","",0,#INTERNET_FLAG_SECURE,0)
headers.s = "Content-Type: application/x-www-form-urlencoded" +Chr(13)+Chr(10)
HttpAddRequestHeaders_(request_handle,headers,Len(headers), #HTTP_ADDREQ_FLAG_REPLACE | #HTTP_ADDREQ_FLAG_ADD)
post_data.s =""
post_data_len = Len(post_data)
send_handle = HttpSendRequest_(request_handle,"",0,post_data,post_data_len)
buffer.s = Space(1024)
bytes_read.l
total_read.l
total_read = 0
Repeat
InternetReadFile_(request_handle,@buffer,1024,@bytes_read)
result + Left(buffer,bytes_read)
buffer = Space(1024)
Until bytes_read=0
If FindString(result,"nuovo argomento")
Debug "2 fase effettuata OK"
CreationTime=Mio_Between(result,"creation_time"+Chr(34)+" value="+Chr(34),Chr(34))
Token=Mio_Between(result,"token"+Chr(34)+" value="+Chr(34),Chr(34))
Sid="&sid="+Mio_Between(result,"sid=",Chr(34))
Else
Debug "2 fase fallita Failed"
EndIf
ProcedureReturn result
EndProcedure
Procedure.s Inviapost()
host.s ="labrepair.altervista.org"
get_url.s = "/posting.php?mode=post&f=2"
RandomSeed(Date())
GUID.l = Random(Date())
result.s = ""
ReadFile(0,"Upload.txt")
Repeat
PostData$+ReadString(0,#PB_File_IgnoreEOL)
Until Eof(0)
CloseFile(0)
If ReadFile(0,"upload.txt")
buffersize=Lof(0)
*filebuffer=AllocateMemory(buffersize)
If *filebuffer
If ReadData(0,*filebuffer,buffersize)
EndIf
EndIf
CloseFile(0)
EndIf
Soggetto.s="testthread"+Str(Random(10000))
Messaggio.s="test message"
Boundary.s=Str(GUID)+Str(Random(999999,100000))
PostData$=PeekS(*filebuffer,buffersize)
PostData$=ReplaceString(PostData$,"%Boundary%",Boundary)
PostData$=ReplaceString(PostData$,"%Token%",Token)
PostData$=ReplaceString(PostData$,"%CreationTime%",CreationTime)
PostData$=ReplaceString(PostData$,"%Soggetto%",Soggetto+Str(Random(99999)))
PostData$=ReplaceString(PostData$,"%Messaggio%",Messaggio)
ContentType$="Content-Type: multipart/form-data; boundary=---------------------------"+boundary
open_handle = InternetOpen_("User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0",#INTERNET_OPEN_TYPE_DIRECT,"","",0)
connect_handle = InternetConnect_(open_handle,host,#INTERNET_DEFAULT_HTTP_PORT,"","",#INTERNET_SERVICE_HTTP,0,0)
request_handle = HttpOpenRequest_(connect_handle,"POST",get_url,"","",0,#INTERNET_FLAG_SECURE,0)
headers.s = "Content-Type: multipart/form-data; boundary=---------------------------"+boundary+#CRLF$
; Headers.s+"Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"+Chr(13)+Chr(10)
; Headers.s=headers+"Accept-Language it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3"+Chr(13)+Chr(10)
; Headers.s=headers+"Accept-Encoding gzip, deflate"+Chr(13)+Chr(10)
; Headers.s=headers+"Referer http://labrepair.altervista.org/posting.php?mode=post&f=2"+sid+Chr(13)+Chr(10)
; Headers.s=headers+"Connection keep-alive"+Chr(13)+Chr(10)
; headers.s = headers+ContentType$+Chr(13)+Chr(10)
; Headers.s=headers+"Content-Length "+Len(PostData$)+Chr(13)+Chr(10)+#CRLF$
Debug headers.s
Debug PostData$
HttpAddRequestHeaders_(request_handle,headers,Len(headers), #HTTP_ADDREQ_FLAG_REPLACE | #HTTP_ADDREQ_FLAG_ADD)
post_data.s =""
post_data_len = Len(post_data)
send_handle = HttpSendRequest_(request_handle,"",0,post_data,post_data_len)
buffer.s = Space(1024)
bytes_read.l
total_read.l
total_read = 0
Repeat
InternetReadFile_(request_handle,@buffer,1024,@bytes_read)
result + Left(buffer,bytes_read)
buffer = Space(1024)
Until bytes_read=0
If FindString(result,"Rispondi al messaggio")
Debug "3 fase effettuata ok"
Else
Debug "3 fase fallita failed"
EndIf
OpenFile(0,"c:\test.html")
WriteString(0,result)
CloseFile(0)
RunProgram("c:\test.html")
ProcedureReturn result
EndProcedure
login()
Nuovopost()
Inviapost()