Jump to content
RyukShini

retry request with new proxy WINHTTP

Recommended Posts

RyukShini
#include "WinHttp.au3"
#include <array.au3>
#include <file.au3>
#include <WinAPI.au3>
#include <string.au3>
#include <WindowsConstants.au3>
#include <FileConstants.au3>
#include <ListviewConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

; Learning HTTP Requests with WinHTTP ;

Global $idOP, $usr, $list, $idEXIT, $call
HotKeySet("{ESC}", "Terminate")

Local $hGUI = GUICreate("Learning", 750, 500, 223, 202, $WS_BORDER)
Local $idEXIT = GUICtrlCreateButton("Exit", 660, 440, 75, Default)
Local $idCon = GUICtrlCreateButton("Start", 10, 10, 725, Default)
Local $siteLab = GUICtrlCreateLabel("Select Test", 20, 48 ,Default, 35)
GUICtrlSetFont (-1,9, 800); bold
Local $IG = GUICtrlCreateCheckbox("test", 75, 45)
Local $realm = GUICtrlCreateCheckbox("test1", 75, 65)
Local $site3 = GUICtrlCreateCheckbox("test2", 200, 45)
Local $site4 = GUICtrlCreateCheckbox("test3", 200, 65)

$list = GUICtrlCreateListView( "     PROXY     |     NAME1     |     NAME2     |     STATUS     ", 20, 100, 710, 300, $LVS_NOSORTHEADER+$LVS_SINGLESEL)


GUISetState(@SW_SHOW, $hGUI)

While 1

        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idEXIT
                Exit
            Case $IG
                If _IsChecked($IG) Then
                    $call = "test"
                EndIf
            Case $idCon
                Call($call)

                    EndSwitch
    WEnd

Func test()

$url = "www.w3schools.com"
$sPage = "/tags/demo_form.asp"
Local $proxies
Local $names
_FileReadToArray("proxies.txt", $proxies) ; read the list of names to array
_FileReadToArray("Okay.txt", $names) ; read the list of names to array
For $i = 1 To UBound($proxies) - 1
$Read = $names[$i]
$Datastring = ('')
$newreadamount = _StringBetween($read,$Datastring, ':')
$newreadamount[0] = StringReplace($newreadamount[0], ":", "")
$name1 = $newreadamount[0]
$Datastring2 = (':')
$newreadamount2 = _StringBetween($read,$Datastring2, '')
$newreadamount2[0] = StringReplace($newreadamount2[0], ":", "")
$name2 = $newreadamount2[0]

$sAdditionalData = "name1="&$name1&"&name2="&$name2

        MsgBox(4096, "Test", $proxies[$i] & " - " & $name1&":"&$name2,1)

; Initialize and get session handle

$hOpen = _WinHttpOpen("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0", $WINHTTP_ACCESS_TYPE_NAMED_PROXY, $proxies[$i])
_WinHttpSetTimeouts($hOpen, 15, 15, 15, 15)
; Get connection handle

$hConnect = _WinHttpConnect($hOpen, $url)

; Make a request
$hRequest = _WinHttpOpenRequest($hConnect, "POST", $sPage)

; Send it. Specify additional data to send too. This is required by the Google API:
_WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded", $sAdditionalData)

; Wait for the response
_WinHttpReceiveResponse($hRequest)

; See what's returned
Dim $sReturned
If _WinHttpQueryDataAvailable($hRequest) Then ; if there is data
    Do
        $sReturned &= _WinHttpReadData($hRequest)
    Until @error
EndIf
; Close handles
_WinHttpCloseHandle($hRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
; See what's returned
MsgBox(4096, "Returned", $sReturned, 1)

If StringInStr($sReturned,'Input was received as:') Then
    GUICtrlCreateListViewItem($proxies[$i] & "|"&$name1&"|"&$name2&"|Success", $list)
    Sleep(500)
    ContinueLoop
ElseIf $sReturned = "" Then
    FileWrite("nottested.txt",$name1&":"&$name2 & @CRLF)
    GUICtrlCreateListViewItem($proxies[$i] & "|"&$name1&"|"&$name2&"|Bad Proxy", $list)
Sleep(500)
ContinueLoop
EndIf

Next

EndFunc

Func Terminate()
    Exit 0
EndFunc

Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked

This is my code and it runs just fine.
My problem is that if I receive Bad Proxy I need it to test the request again with the same array input $name1 / $name2 until I receive
'Input was received as:'
So basically
 

ElseIf $sReturned = "" Then
    FileWrite("nottested.txt",$name1&":"&$name2 & @CRLF)
    GUICtrlCreateListViewItem($proxies[$i] & "|"&$name1&"|"&$name2&"|Bad Proxy", $list)
Sleep(500)
TRY AGAIN WITH NEW PROXY AND SAME CREDENTIALS
EndIf

Is this possible and if so do you have either some example code and/or some helpfile I can read.

Thanks in advance!

Share this post


Link to post
Share on other sites
RyukShini

Anyone able to help me out??

Thanks in advance.

Share this post


Link to post
Share on other sites
RyukShini

Still trying to figure this out, any help is appreciated.

Share this post


Link to post
Share on other sites
Danyfirex

Hello. Just create a function where you can check a return value.

 

so you can  do: Do until (my condition is OK)

 

Saludos

Share this post


Link to post
Share on other sites
RyukShini
On 28/10/2016 at 3:52 PM, Danyfirex said:

Hello. Just create a function where you can check a return value.

 

so you can  do: Do until (my condition is OK)

 

Saludos

I don't really see how that will help in my case?
Sorry.

Share this post


Link to post
Share on other sites
RyukShini

Anyone able to give me an example?
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • Surya
      By Surya
      Hi everyone its been loooong since I posted here 
      I have been trying to convert this curl executable parameters into autoit using the winhttp com object;
      curl -F data_file=@my_audio_file.mp3 -F model=en-US "https://api.speechmatics.com/v1.0/user/41049/jobs/?auth_token=MmQ5MTk4jdsgjhgghstOGU5YS00OWFhLWghdgjshgdhbshj017###" any ideas guys
       
      PS: I am excited to post here after a looong time
    • Ascer
      By Ascer
      Hello
      Opertation Sys: Win7 x64
      Problem: Connecting to webs using TLS 1.1 +
      Description: WinHttp.WinHttpRequest.5.1 using TLS 1.0 by default, i need higher version to connect into some webs.
      Dim $oHttp = ObjCreate("WinHTTP.WinHTTPRequest.5.1") $oHttp.open ("GET", "https://howsmyssl.com/a/check", False) $oHttp.Option(9) = 128 ; 128 - TLS 1.0, 512 - TLS 1.1, 2048 - TLS 1.2, 2056 - TLS 1.1 & TLS 1.2 $oHttp.Send ConsoleWrite($oHttp.responseText & @CRLF) ; at end of the respond you can check your TLS version. Mine is: {"tls_version":"TLS 1.0","rating":"Bad"} Error: $oHttp.Option works only with parameter 128 (TLS 1.0) other values make error {Bad parameter}
      Additional: I've done this tutorial about enabling TLS in registry: <link>
      Thanks for support.
      Ascer
    • islandspapand
      By islandspapand
      Hi All
      i am currently trying to add a function to my project that can send SMS, i have gone with Twilio for the sms service that use a REST API.
      I have never worked with an API before, and could use some help.
      I can get my function working with using cURL.exe and copy past command from the website with the following code. And thats great unfortunately i am have issue with character like æøå when sending a SMS appears like a box or ?. this does not happen if i do it from the website so it looks like a Unicode issue in curl.exe.
      I have done some searching on the forum and understand that i should be able to implement this curl command with the WinHTTP UDF from @trancexx so i don't need a third part exe and it might fix my charater issue.
      Unfortunately i really don't understand how i am to change curl commands to the WinHTTP and i was hoping some good maybe give me an example i could learn from.
      Thanks in advanced
      i have removed the AuthToken number from the script.
      _SendSMS("00000000","SomeOne","SMS body info") Func _SendSMS($SendTo,$SendFrom,$Msgtxt) $AccountSID = "ACbb765b3180d5938229eff8b8f63ed1bc" $AuthToken = "Auth Token number" $Data = '"https://api.twilio.com/2010-04-01/Accounts/'&$AccountSID&'/Messages.json"'& _ '-X POST \ --data-urlencode "To=+45'&$SendTo&'" \ --data-urlencode "From='&$SendFrom&'" \ --data-urlencode "Body='&$Msgtxt&'" \ -u '&$AccountSID&':'&$AuthToken&'' ShellExecute(@ScriptDir&"\curl.exe","-k "&$Data) ;~ curl 'https://api.twilio.com/2010-04-01/Accounts/ACbb765b3180d5938229eff8b8f63ed1bc/Messages.json' -X POST \ ;~ --data-urlencode 'To=+4500000000' \ ;~ --data-urlencode 'From=Reception' \ ;~ --data-urlencode 'Body=Test Body' \ ;~ -u ACbb765b3180d5938229eff8b8f63ed1bc:[AuthToken] EndFunc  
       
    • ripdad
      By ripdad

      This script is based on algorithm code from EnrMa.
      Updated: January 22, 2018
      Made improvements. Changes are in the script header.
      Known Issues: AutoIt x64 does not work properly with this script.
      Download: LocalProxyServer_v1.00.zip
       
    • jesus40
      By jesus40
      Hello friends, i have a working curl command that show informations about my account on binance.com, but_it dont work with autoit code without curl.exe.
      I want to do it without curl, because the whole process much Slower_ with StdoutRead (I want get the response in variable.)
      My Curl command in Autoit:
      This 2 are works, but_ i would like to do it without curl.exe
      $apikey="XYZ" sCommand = @ScriptDir & '\curl.exe -k -H "X-MBX-APIKEY: ' & $apikey & '" -X GET "https://api.binance.com/api/v3/account?' & $request the same in .bat  file
      curl.exe -k -H "X-MBX-APIKEY: XYZ" -X GET "https://api.binance.com/api/v3/account?timestamp=1514917812000&signature=85bdee77e53cd521e1d5229fbfb459d53799c42b3fa4596d73f1520fad5f965a" (I use curl with -k option which allows curl to make insecure connections, because there is problem with the sites certificate, (cURL error 60))
       
      I tried many variations, this is the latest... I cant get the same response.
      curl $error message (I changed ): {"code":-2015,"msg":"Invalid API-key, IP, or permissions for action."}
      autoit version $error message (Response code:400): Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed.
       
      $request = $query & '&signature=' & $signature $oHTTP = ObjCreate("winhttp.winhttprequest.5.1") $oHTTP.Open("GET", "https://api.binance.com/api/v3/account", False) $oHTTP.SetRequestHeader("X-MBX-APIKEY", $apikey) $oHTTP.Send($request) $oReceived = $oHTTP.ResponseText $oStatusCode = $oHTTP.Status If $oStatusCode <> 200 then MsgBox(4096, "Response code", $oStatusCode) EndIf  
      thanks
×