dll + .htaccess Problem

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von FantaZimt.

    dll + .htaccess Problem

    Hey Leute, ich hab ein kleines Problem.

    Ich hab ein Verzeichnis mit .htaccess gesichert und möchte nun über VB darauf zugreifen. Das ganze funktioniert auch in einer normalen Form aber, sobald ich den Code in meiner DLL aufrufe eben nicht.

    Mein Code:

    VB.NET-Quellcode

    1. Public Shared Function Registration(ByVal username As String, ByVal passwort As String, ByVal HWID As String, ByVal htaccess As Boolean, ByVal htaccessUsername As String, ByVal htaccessPasswort As String) As String
    2. Dim nv As New NameValueCollection
    3. Dim wc As New WebClient
    4. nv.Clear()
    5. nv.Add("u", username)
    6. nv.Add("pw", MD5StringHash(passwort))
    7. nv.Add("h", HWID)
    8. nv.Add("z", "0")
    9. nv.Add("o", "1")
    10. Dim result() As Byte
    11. If htaccess = True Then
    12. wc.Credentials = New NetworkCredential(htaccessUsername, htaccessPasswort)
    13. result = wc.UploadValues("******.de/register.php", "POST", nv)
    14. Else
    15. result = wc.UploadValues("******.de/register.php", "POST", nv)
    16. End If
    17. Dim resultstring As String = Encoding.ASCII.GetString(result)
    18. Return resultstring
    19. End Function


    Die Fehlermeldung die ich bekomme lautet: "Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung wurde unerwartet getrennt. "

    Wieso funktioniert das ganze nicht in der DLL ? ?( ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FantaZimt“ ()

    @FantaZimt Was muss ich tun, um diesen Effekt zu reproduzieren?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Den genannten Code in eine DLL schreiben und z.b. per Button ausführen

    Code für den Button

    VB.NET-Quellcode

    1. strRegistration = Registration(username.Text, passwort.Text, HWID, True, "Username", "Passwort")


    Edit: Problem tritt nur auf wenn die DLL aus einem anderen Projekt importiert wird.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FantaZimt“ ()

    Leider kann ich Deinen Effekt nicht reproduzieren.
    Was mir aber auffällt:

    FantaZimt schrieb:

    VB.NET-Quellcode

    1. Public Shared Function Registration(...)
    Mach da mal das Shared weg, dass Du die Klasse mit New instanziieren musst, bevor Du darauf zugreifen kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Außerdem kannst du den Code vereinfache, indem du die If Abfrage modifiziert und den Else Teil weglässt.

    VB.NET-Quellcode

    1. If htaccess = True Then
    2. wc.Credentials = New NetworkCredential(htaccessUsername, htaccessPasswort)
    3. End If
    4. result = wc.UploadValues("******.de/register.php", "POST", nv)
    Damit sparst du dir redundanten Code (wenn du etwa im oberen UpLoadeValues() etwas an der URL änderst, es aber unten vergisst, kann das zu Fehlern führen.

    Edit: Hast du mal versucht, einen UserAgent anzugeben? Könnte sein, dass sich unter Windows Forms der WebClient die Infos über das WebBrowser Control holt, welches wiederum auf den Standard Browser zugreift (Ist aber nur eine Theorie!!)

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Radinator“ ()

    @RodFromGermany
    Wenn ich das Shared weglassen, kann ich aber nicht mehr auf die Funktion zugreifen, oder verstehe ich das jetzt falsch? ?(

    @Radinator
    Erledigt!

    Allerdings funktioniert es mit UserAgent auch nicht. :/


    Edit: Hab mal schnell ein Beispiel erstellt.

    Edit2: Beispiel wieder gelöscht

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „FantaZimt“ ()

    FantaZimt schrieb:

    oder verstehe ich das jetzt falsch?

    RodFromGermany schrieb:

    dass Du die Klasse mit New instanziieren musst

    VB.NET-Quellcode

    1. Dim var = New NAME_DEINER_DLL.NAME_DER_KLASSE()
    2. strRegistration = var.Registration(username.Text, passwort.Text, HWID, True, "Username", "Passwort")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    FantaZimt schrieb:

    Funktioniert leider nicht selber Fehler wie vorher.

    Radinator schrieb:

    Hast du mal versucht, einen UserAgent anzugeben?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ok. Sry, hab ich überlesen

    Edit: Wie sieht denn überhaupt dein Empfangs-Script aus? Ich hab mir mal eine test PHP Script auf meinen Webserver gestellt und folgendes reingeschrieben:

    PHP-Quellcode

    1. <?php
    2. if (isset($_GET['aktion'])){
    3. $aktion = isset($_GET['aktion']) ? $_GET['aktion'] : "";
    4. $user = isset($_GET['user']) ? $_GET['user'] : "";
    5. $pass = isset($_GET['pass']) ? $_GET['pass'] : "";
    6. $data = array('aktion' => $aktion, 'user' => $user, 'pass' => $pass);
    7. header('Content-Type: application/json; charset=utf8');
    8. echo json_encode($data);
    9. }
    10. ?>


    Bei mir kommt bei einem Aufruf von UploadValues immer eine Exception daher. Nur wenn ich per DownloadData mir den Inhalt des "Responses" hole, geht alles glatt.

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. this.textBox1.Text = DownloadContent("http://xxx.de/subfolder/data.php");
    4. }
    5. private string DownloadContent(string url)
    6. {
    7. var wc = new WebClient();
    8. var nv = new NameValueCollection();
    9. nv.Add("aktion", "upload");
    10. nv.Add("user", "test");
    11. nv.Add("pass", "word");
    12. var result = wc.UploadValues(url, "GET", nv);
    13. return Encoding.UTF8.GetString(result);
    14. }


    Was hast du anders gemacht?

    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Radinator“ ()

    Das Script kann ich erst so gegen 18uhr Zeigen, bin momentan nicht zuhause.

    Was ich aber überhaupt nicht verstehe ist, das der Code wenn ich ihn in der Form ausführe funktioniert aber in der DLL nicht..

    @Radinator

    PHP-Quellcode

    1. <?php
    2. $con = mysql_connect('Adresse', 'Username', 'Passwort') or die (mysql_error());
    3. $username = mysql_real_escape_string($_POST['u']);
    4. $option = $_POST['o'];
    5. mysql_select_db('Datenbank', $con);
    6. $str_query = "SELECT * FROM user WHERE user= '$username'";
    7. $result = mysql_query($str_query, $con) or die (mysql_error());
    8. $resultcount = mysql_num_rows($result);
    9. if ($resultcount > 0 && $option == 0 || $resultcount > 0 && $option == 1)
    10. {
    11. echo 'Username bereits vergeben';
    12. } elseif ($resultcount == 0 && $option == 0)
    13. {
    14. echo "Username verfuegbar";
    15. } elseif ($resultcount == 0 && $option == 1)
    16. {
    17. $ip = $_SERVER['REMOTE_ADDR'];
    18. $password = mysql_real_escape_string($_POST['pw']);
    19. $hwid = mysql_real_escape_string($_POST['h']);
    20. $zugelassen = mysql_real_escape_string($_POST['z']);
    21. $query = "INSERT INTO user (user, passwd, hwid, zulassung, regip) VALUES (
    22. '$username',
    23. '$password',
    24. '$hwid',
    25. '$zulassung',
    26. '$ip')";
    27. $sql = mysql_query($query) or die("TEST".mysql_error());
    28. echo 'Erfolgreich registriert';
    29. }
    30. ?>

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „FantaZimt“ ()