2017-04-08 2 views
2

Ich versuche, eine Webanforderung von meiner C# Windows-Anwendung auf meiner Website, , aber das gewünschte Ergebnis ist leer oder null, wenn nur von C# aufgerufen, aber nicht von der Website, wo es wie erwartet funktioniert.Warum ist MySQL OK, wenn es vom Browser aufgerufen wird, aber leer oder NULL, wenn es von C# aufgerufen wird?

Bevor ich meine Anfrage mache, muss ich mit einer login request beginnen, die wie erwartet funktioniert und tatsächlich den richtigen Wert zurückgibt.

WICHTIG EDIT:

Ich versuchte, meinen PHP Code in meine login.php Datei zu Copypaste und es funktioniert in C# und gibt den richtigen Count-Wert.

Ist meine HttpClient nicht richtig konfiguriert vielleicht?


Mein PHP Test-Code sieht wie folgt:

<?php 
    session_start(); 
    if(!isset($_SESSION['user'])){ header("Location: index.php"); } 

    include_once 'dbconnect.php'; //contains $db 

    $sql = "SELECT * FROM myTable"; //contains two rows 
    $sql_res = mysqli_query($db, $sql); 
    $proxyCount = mysqli_num_rows($sql_res); 
    $echo "Count: ".$proxyCount; 
?> 

Und mein C# sieht wie folgt aus:

using System; 
using System.Collections.Generic; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

using System.IO; 
using System.Net.Http; 

using ModernHttpClient; 
using Newtonsoft.Json; 


namespace WindowsFormsApp1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public void log(string str) 
     { 
      logbox.AppendText(str + Environment.NewLine); 
     } 

     private string host = "http://www.mywebsite.com/"; 
     private HttpClient httpClient = new HttpClient(new NativeMessageHandler()); 
     private async Task<string> request(string target, Dictionary<string, string> _parameters) 
     { 
      string uri = host + target; 

      using (HttpResponseMessage response = await httpClient.PostAsync(uri, new FormUrlEncodedContent(_parameters))) 
       return new StreamReader(await response.Content.ReadAsStreamAsync()).ReadToEnd(); 

     } 

     private async void button1_Click(object sender, EventArgs e) 
     { 

      string loginResp = await request("login.php", new Dictionary<string, string> { { "username", "user" }, { "password", "password" } }); 
      log(loginResp); 



     } 

     private async void button2_Click(object sender, EventArgs e) 
     { 
      string proxiesResp = await request("proxy/proxy.php", new Dictionary<string, string> { { "getAllProxyRequests", "" } }); 
      //above returns "count: " in C#, but returns "count: 2" in webbrowser 
      log(proxiesResp); 
     } 
    } 
} 
+1

Sie Ihre URL versucht Aufruf haben sagen zu ändern 'http: // www.mywebsite.com /' von Fiddler oder PostMan zu sehen, ob Sie bekommen Ergebnisse? – CodingYoshi

+0

@CodingYoshi Entschuldigung für die Verschwendung Ihrer Zeit. Ich habe das Problem gefunden. – vaid

+1

Keine Sorgen. Ich prüfe immer Sachen mit Fiddler oder einem ähnlichen Werkzeug, bevor ich eine einzelne Codezeile für diese Art von Ding schreibe. Sobald ich weiß, dass dieser Teil funktioniert, schreibe ich den Code. Freut mich, dass Sie das Problem gelöst haben. – CodingYoshi

Antwort

1

das Problem gefunden, es war menschliches Versagen.

Ich hatte die Datei dbconnect.php ein Verzeichnis unter, wo myProblem.php befand.

Ich hatte die Linie

include_once 'dbconnect.php'; 

zu

include_once '../dbconnect.php'; 
Verwandte Themen