Du bist nicht angemeldet.

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

1

Freitag, 17. Juli 2009, 15:48

[Version 4.1] HttpPostRequestLib

Name des Programms:
HttpPostRequestLib

Beschreibung:
Mit dieser Library lassen sich Variablen und Dateien via POST an ein Script schicken.
Sie unterstützt deflate und gzip komprimierten Content. Zudem kann man einen Proxy angeben über den der Request geschickt wird.
Im Beispiel unten ist dargestellt wie man GET, POST und FILES an das angegebene Script schickt.

Die Funktionen GetLibVersion() und GetOSVersion() dienen dazu wenn man einen eigenen UserAgent String zusammen setzten möchte.

Changelog:
Version 2.1 - ProgressChanged Event hinzugefügt und die Methoden GetOSVersion() und GetLibVersion() als Shared deklariert.
Version 2.2 - Streams gefixed, so dass sie nun nicht mehr hängen sollte wenn 2 Requests hintereinander gesendet werden.
Version 2.3 - Proxy unterstürtzung eingefügt.
Version 2.4 - Über die SubmitEventArgs lässt sich nun der Sourcecode und die Uri auslesen, ebenso direkt von der Request Instanz.
Version 3.0 - Komplette umstrukturierung der Lib und hinzufügen neuer Funktionen womit sich nun auch ByteArrays hinzufügen lassen
Version 3.1 - Optimierung der Library, so dass nun Ressourcen über Disposing wieder freigegeben werden können.
Version 3.2 - Abbrechen des Uploadvorgangs
Version 4.0 - Überarbeitung und optimierung des Codes und runterschrauben des .NET-Frameworks auf 2.0
Version 4.1 - CookieCollection kann nun zwischen gespeichert und einem neuen Request wieder zugeordnet werden.

Screenshot:
- keiner -

Anwendungs Beispiel:
In diesem Beispiel gehe ich davon aus, das zuerst ein Login nötig ist um Daten hochzuladen, somit mache ich 2 Requests und speichere die Cookies.

 Beispiel VB Projekt

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Imports HttpPostRequestLib.Net

Public Class Form1
	Private WithEvents reg As HTTPPostRequest
	Private t1 As New Threading.Thread(AddressOf UploadFiles)
	Private Delegate Sub UpdateTextbox(ByVal Text As String)

	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    	t1.Start()
	End Sub

	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    	reg.CancelSubmit = True
	End Sub

	Private Sub UploadFiles()
    	Dim Sourcecode As String = String.Empty
    	Dim Cookies As System.Net.CookieCollection

    	' Thread zurücksetzten damit er neu gestartet werden kann
    	t1 = New Threading.Thread(AddressOf UploadFiles)

    	' Request erstellen für den Login
    	reg = New HTTPPostRequest("http://localhost/vb/post.php?mode=login")
    	'reg.Proxy = New Proxy("http://www.proxy.com", 1432, "test", "password")
    	Try
        	' POST Variablen hinzufügen
        	reg.Post.Add("username", "Dodo")
        	reg.Post.Add("passwd", "123")

        	' Request abschicken
        	Sourcecode = reg.Submit()
    	Catch ex As Exception
        	MessageBox.Show(ex.Message)
    	End Try

    	' Prüfen ob der Login erfolgreich war
    	If Sourcecode.Contains("login ok") Then
        	' Cookies vom aktuellen Request zwischenspeichern
        	Cookies = reg.Cookies

        	' neuen Request für den Upload erstellen
        	reg = New HTTPPostRequest("http://localhost/vb/post.php?mode=upload")
        	' Cookies vom ersten Request zuweisen
        	reg.Cookies = Cookies
        	Try
            	' POST Variable hinzufügen
            	reg.Post.Add("folder", "ordner")

            	' Dateien hinzufügen
            	reg.Files.Add("file[]", "e:\bild.jpg")
            	reg.Files.Add("file[]", "test.avi", System.IO.File.ReadAllBytes("e:\test.avi"), MimeTypes.Video.Avi)

            	' Request abschicken
            	Sourcecode = reg.Submit()
        	Catch ex As Exception
            	MessageBox.Show(ex.Message)
        	End Try
    	End If

    	' In einer Textbox die Ausgaben des Scriptes ausgeben
    	Me.Invoke(New UpdateTextbox(Function(Text As String) TextBox1.Text = Text), Sourcecode)
	End Sub

	Private Sub reg_SubmitComplete(ByVal sender As Object, ByVal e As SubmitEventArgs) Handles reg.SubmitComplete
    	TextBox1.Text = e.Sourcecode
	End Sub

	Private Sub reg_ProgressChanged(ByVal sender As Object, ByVal e As ProgressEventArgs) Handles reg.ProgressChanged
    	If Not e.TotalByte = 0 Then
        	Dim prozent As Integer = CInt((e.UploadedByte / e.TotalByte) * 100)

        	ProgressBar1.Value = prozent
        	Label1.Text = prozent.ToString()
    	End If
	End Sub

	Private Sub reg_SubmitCancel(ByVal sender As Object, ByVal e As EventArgs) Handles reg.SubmitCancel
    	' Meldung ausgeben wenn der Request abgebrochen wurde
    	MessageBox.Show("Cancel Upload")
    	reg.Dispose()
	End Sub
End Class


Beispiel PHP Script für Login & MultiUpload:

 post.php

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
    error_reporting(E_ALL);
    
    switch($_GET['mode']) {
        case "login":
            if($_POST['username'] == "Dodo" && $_POST['passwd'] == "123") {
                setcookie("login""1"time() + 3600"/");
                echo "login ok";
            } else {
                echo "login failed";
            }
            break;
        case "upload":
            if(count($_COOKIE) > 0) {
                if($_COOKIE['login'] == "1") {
                    $folder $_POST['folder'];
                    if(!empty($folder) && !is_dir($folder)) mkdir($folder);

                    if(count($_FILES) > 0) {
                        if(is_array($_FILES['file']['tmp_name']) && count($_FILES['file']['tmp_name']) > 0) {
                            foreach($_FILES['file']['tmp_name'] as $index => $dummy) {
                                if(move_uploaded_file($_FILES['file']['tmp_name'][$index], $folder."/".$_FILES['file']['name'][$index])) {
                                    echo $_FILES['file']['name'][$index]." ok\r\n";
                                } else {
                                    echo $_FILES['file']['name'][$index]. " failed\r\n";
                                }
                            }
                        } else {
                            if(move_uploaded_file($_FILES['file']['tmp_name'], $folder."/".$_FILES['file']['name'])) {
                                echo $_FILES['file']['name']." ok\r\n";
                            } else {
                                echo $_FILES['file']['name']. " failed\r\n";
                            }
                        }
                    } else {
                        echo "no files to upload";
                    }
                } else {
                    echo "cookie exists but wrong value";
                }
            } else {
                echo "no cookies";
            }
            break;
    }
?>


Verwendete Programmiersprache:
Visual Basic 2008

Systemanforderungen:
.NET Framework 2.0

Download:
HttpPostRequestLib4.rar (18 KB / 53 KB)

Lizenz/Weitergabe:
Freeware

Einkompilieren ist nicht erlaubt. Eine Nennung ist nicht nötig.
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

Dieser Beitrag wurde bereits 23 mal editiert, zuletzt von »Dodo« (19. Januar 2012, 14:09) aus folgendem Grund: Neue Version


Es haben bereits 3 registrierte Benutzer diesen Beitrag als hilfreich eingestuft.

Benutzer, die diesen Beitrag hilfreich fanden:

Jopi24, BFDeluxe, Infinity

Bady

BrainStorm 127.0.0.1

  • »Bady« ist männlich

Beiträge: 898

Dabei seit: 23. Februar 2009

Hilfreich-Bewertungen: 39

  • Private Nachricht senden

2

Freitag, 17. Juli 2009, 21:50

Echt gute Idee werds mal testen!

Danke
GOOGLE ist mein Meister :)

honsa

Registrierter Benutzer

Beiträge: 32

Dabei seit: 10. März 2009

Wohnort: ZH

  • Private Nachricht senden

3

Freitag, 17. Juli 2009, 23:52

danke, eine nützliche sache.

allerdings will das bei mir nicht so richtig funktionieren. die verbindung kriegt er hin aber es werden keine daten übertragen, hat jemand eine idee an was das liegen kann?

edit lokal funktioniert es aber bei einem externen kommen die daten nicht an

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »honsa« (18. Juli 2009, 00:48)


Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

4

Samstag, 18. Juli 2009, 01:49

Ich habe es bisher nur Lokal getestet, werde es morgen mal auf einen meiner Server probieren!
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

honsa

Registrierter Benutzer

Beiträge: 32

Dabei seit: 10. März 2009

Wohnort: ZH

  • Private Nachricht senden

5

Samstag, 18. Juli 2009, 02:48

es liegt am server, auf nem anderen funktioniert es tadellos

was könnte es sein, dass verhindert, dass post daten ankommen

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

6

Samstag, 18. Juli 2009, 03:06

Eigentlich gar nichts O.o also kannst mal verushcen wenn ein normales Formular mit POST machst und es dann an die Seite schickst.
Ist es eine eigene PHP Seite oder sin Upload Server? Weil dann könnte es daran liegen, das nach dem Referer geschaut wird, ob die Infos wirklich von dem Server alleine kommen, das nach dem UserAgent geschaut wird, ich nutze einen eigenen UserAgent, vielleicht wird der incht akzeptiert!
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

julianibus

Registrierter Benutzer

  • »julianibus« ist männlich

Beiträge: 550

Dabei seit: 18. Oktober 2008

Wohnort: Aschaffenburg

  • Private Nachricht senden

7

Samstag, 18. Juli 2009, 08:22

Nützliche DLL!
Ich werde sie verwenden, wenn ich sie brauche. :thumbsup:

honsa

Registrierter Benutzer

Beiträge: 32

Dabei seit: 10. März 2009

Wohnort: ZH

  • Private Nachricht senden

8

Samstag, 18. Juli 2009, 17:50

Eigentlich gar nichts O.o also kannst mal verushcen wenn ein normales Formular mit POST machst und es dann an die Seite schickst.
Ist es eine eigene PHP Seite oder sin Upload Server? Weil dann könnte es daran liegen, das nach dem Referer geschaut wird, ob die Infos wirklich von dem Server alleine kommen, das nach dem UserAgent geschaut wird, ich nutze einen eigenen UserAgent, vielleicht wird der incht akzeptiert!
hab jetzt mal direkt auf dem server in dem php script ein formular erstellt und das selbe auch auf nem anderen mit der action auf den problematischen server. dazu hab ich mir die systemvariable server ausgeben lassen, die einzigen unterschiede:

aufruf von sich selbst

Zitat



[HTTP_REFERER] => http://www.server.com/vb/test.php
[CONTENT_LENGTH] => 21
[HTTP_ORIGIN] => http://www.server.com
[CONTENT_TYPE] => application/x-www-form-urlencoded

[REMOTE_PORT] => 62002
[REQUEST_METHOD] => POST


aufruf von aussen:

Zitat



[REMOTE_PORT] => 62002
[HTTP_REFERER] => http://www.server2.com/vb/test.php

[REMOTE_PORT] => 62001
[REQUEST_METHOD] => GET

Enten Mann

unregistriert

9

Sonntag, 19. Juli 2009, 18:09

Wofür steht das "file" bei

Visual Basic Quellcode

1
    TextBox1.Text = myRequest.Create("http://localhost/vb/test.php", "file", "C:\IMG2353.jpg", myCollection)

steht das für <input type="file" /> ?

#EDIT
Bekomme als Antwort nur

Zitat

�
bei picspider.net

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Enten Mann« (19. Juli 2009, 18:17)


Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

10

Sonntag, 19. Juli 2009, 18:31

Nein für den Namen des Inputfeldes

<input type="file" name="entenmann" />

um in PHP auf die hochgeladene Datei zuzugreifen

$_FILES['entenmann']['tmp_name'];

über mein request zu senden

HttpPostRequest.Create("sever.de/seite.php", "entenmann", "C:\datei.jpg")
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

Enten Mann

unregistriert

11

Sonntag, 19. Juli 2009, 18:54

bekomme trotzdem nur "�" und bei 5 anderen imagehostern auch nur denn quelltext von der index.php er uploaded also nicht, auch wenn ich die daten aus dem header mit sende geht es nicht und auch wenn nur die daten gesendet werden geht es nicht.

naja muss ich wohl weiter schauen

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

12

Sonntag, 19. Juli 2009, 19:29

Ich werde mal schauen, problem bei solchen ImageHostern ist, die arbeiten viel mit AJAX Scripten und wenn man was uploaded und dann kommt ein AJAX Script, wleches nach der Bildverarbeitung auf jenes verlinkt, bekommt der Requester das nicht mit, weil er nur den Quelltext zurück gibt und nicht auswertet, wie ein Browser, der ja das AJAX Script ausführt und somit dann nach abarbeitung weiter redirected.

Edit: Wohlmöglich genau aus diesem Gund, damit man NUR über die Homepage machen kann, dmait man die Werbung sieht und so weiter!
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

Enten Mann

unregistriert

13

Sonntag, 19. Juli 2009, 19:55

Ne für ImageBanana z. B. gibt es ein Upload Tool hat en Gulli User programmiert.

Hab ihm mal ne PM geschickt ob er mir seinen Source zur verfügung stellt.

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

14

Sonntag, 19. Juli 2009, 20:37

Vielleicht übern WebBrowser ^^
Also ich werde es morgen nochmal Testen wie es mit solchen Pages aussieht!
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

Enten Mann

unregistriert

15

Montag, 20. Juli 2009, 08:00

Hab denn code nun bekommen, muss nur noch denn quelltext holen, das bild sendet er aber komplett weil ich denn statuscode 200 bekomme

KlyX

Registrierter Benutzer

  • »KlyX« ist männlich
  • »KlyX« wurde gesperrt

Beiträge: 110

Dabei seit: 9. Dezember 2008

Wohnort: Zürich, Schweiz

  • Private Nachricht senden

16

Dienstag, 21. Juli 2009, 00:38

Hey, tolle DLL. gute Idee, bin gerade an Programmen, die genau mit POST und GET arbeiten und von daher könnte ich sowas super brauchen.

Frage: Gibt es die Möglichkeit, diese DLL auch in VB6 zu nutzen oder funzt es ausschliesslich mit .NET?

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

17

Dienstag, 21. Juli 2009, 07:14

Ich denke nicht das sie in VB6 funktioniert, und wenn doch, bräuchtest du trotzdem das .NET Framework, damit die DLL richtig arbeitet. Demnach kannste gleich VB 2K8 EP nehmen xD
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

tobiasre

Registrierter Benutzer

  • »tobiasre« ist männlich

Beiträge: 41

Dabei seit: 20. Juli 2008

Wohnort: Hessen

  • Private Nachricht senden

18

Montag, 27. Juli 2009, 22:21

Hab die .dll als Verweis hinzugefügt. Allerdings sagt er bei:

Quellcode

1
2
Dim myRequest As Net.HTTPPostRequest = New Net.HTTPPostRequest
 Dim myCollection As Net.PostCollection = New Net.PostCollection

Das er HTTPPostRequest und PostCollection nicht kennt. Muss ich davor noch etwas machen bzw. ist es in vb 2008 anders?
Hoffe mir kann jemand helfen.

  • »haiyyu« ist männlich

Beiträge: 2 473

Dabei seit: 16. November 2008

Wohnort: Österreich

Hilfreich-Bewertungen: 354

  • Private Nachricht senden

19

Montag, 27. Juli 2009, 22:31

Hey,
füge mal in den Projekteigenschaften einen Verweis auf die System.Net.Dll hinzu.

MfG,
-haiyyu
Bitte keine Fragen bezüglich im Forum behandleten Themen per PN! Auch Bitten zur Beantwortung eines Themas per privater Nachricht wird nicht nachgekommen.

Dodo

Super Moderator

  • »Dodo« ist der Autor dieses Themas

Beiträge: 4 961

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 586

  • Private Nachricht senden

20

Dienstag, 28. Juli 2009, 10:25

Nein du musst den noch Imports HTTPPostRequest ganz oben einfügen. Oder bei der deklaration mit angeben.

Visual Basic Quellcode

1
2
Dim myRequest As HTTPPostRequest.Net.HTTPPostRequest = New HTTPPostRequest.Net.HTTPPostRequest
 Dim myCollection As HTTPPostRequest.Net.PostCollection = New HTTPPostRequest.Net.PostCollection


Aber damit das Übersichtlicher wird, kannst du Imports benutzen und somit braucht man nicht mehr den DLL Namen vorschreiben

Visual Basic Quellcode

1
2
3
4
Imports HTTPPostRequest
'.... Klassen Deklaration
Dim myRequest As Net.HTTPPostRequest = New Net.HTTPPostRequest
 Dim myCollection As Net.PostCollection = New Net.PostCollection


oder

Visual Basic Quellcode

1
2
3
4
Imports HTTPPostRequest.NEt
'.... Klassen Deklaration
Dim myRequest As HTTPPostRequest = New HTTPPostRequest
 Dim myCollection As PostCollection = New PostCollection
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

Verwendete Tags

Http, library, post, Request, Upload, Web

Social Bookmarks