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.