2010-05-03 6 views
0

Google에서 웹 서버로 POST 데이터에 이르기까지 여러 가지 시도를 해봤지만 그 중 아무 것도 작동하지 않습니다. 두 번째 변수가 SQL 쿼리라고 생각할 때 변수를 요청으로 변환하는 방법에 여전히 집착하고 있습니다. 공백이 있습니다.웹 서버에 POST 변수가 있습니까?

누군가가 WebClient를 사용하여 POST 데이터를 사용하는 올바른 방법을 알고 있습니까? HttpWebRequest/HttpWebResponse보다 코드가 적기 때문에 WebClient를 사용하고 싶습니다.

개인 서브를 Button1_Click (은 System.Object, 경우 System.EventArgs으로 ByVal의 전자로 ByVal의 송신자) Button1.Click 희미한 화장실 = 새로운 웹 클라이언트()

''#convert data 
    wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded") 
    Dim postData = String.Format("db={0}&query={1}", _ 
           HttpUtility.UrlEncode("books.sqlite"), _ 
           HttpUtility.UrlEncode("SELECT id,title FROM boooks")) 

    ''#Dim bytArguments As Byte() = Encoding.ASCII.GetBytes("db=books.sqlite|query=SELECT * FROM books") 

    ''#POST query 
    Dim bytRetData As Byte() = wc.UploadData("http://localhost:9999/get", "POST", postData) 
    RichTextBox1.Text = Encoding.ASCII.GetString(bytRetData) 

    Exit Sub 

    Dim client = New WebClient() 

    Dim nv As New Collection 
    nv.Add("db", "books.sqlite") 
    nv.Add("query", "SELECT id,title FROM books") 

    Dim address As New Uri("http://localhost:9999/get") 

    ''#Dim bytRetData As Byte() = client.UploadValues(address, "POST", nv) 

    RichTextBox1.Text = Encoding.ASCII.GetString(bytRetData) 

    Exit Sub 

    ''#Dim wc As New WebClient() 

    ''#convert data 
    wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded") 
    Dim bytArguments As Byte() = Encoding.ASCII.GetBytes("db=books.sqlite|query=SELECT * FROM books") 

    ''#POST query 
    ''#Dim bytRetData As Byte() = wc.UploadData("http://localhost:9999/get", "POST", bytArguments) 
    RichTextBox1.Text = Encoding.ASCII.GetString(bytRetData) 

    Exit Sub 
End Sub 
를 처리 : 여기

는 지금까지 시도 무엇

감사합니다.


편집 : 의견을 보내 주신 모든 분들께 감사드립니다. 당신이 당신의 웹 클라이언트의 대상으로 "localhost"를 사용하고 난 당신이이 사이트를 제어 가정합니다 때문에

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim baseURL As String = "localhost:9999" 
    Dim strURL As String = "http://" & baseURL & "/get" 

    Dim client As New WebClient() 

    client.Headers.Add("Content-Type", "application/x-www-form-urlencoded") 
    client.Headers.Add("Accept-Encoding", "text/plain") 
    client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Iron/4.0.280.0 Chrome/4.0.280.0 Safari/532.9") 
    'BAD client.Headers.Add("Host", baseURL) 
    'BAD client.Headers.Add("Host", "localhost") 

    'Convert in parameters in case contain spaces, accents, etc. 
    Dim postData As String = String.Format("db={0}&query={1}", _ 
         HttpUtility.UrlEncode("books.sqlite"), _ 
         HttpUtility.UrlEncode("SELECT id,title FROM books")) 

    RichTextBox1.Text = client.UploadString(New Uri(strURL), "POST", postData) 
End Sub 
+0

나는 거의 두려워하지만 실제로 시스템 외부에서 보낸 SQL 쿼리를 실행하려고합니까? – tloach

+0

이것은 POST와는별로 관련이 없지만 http://sqlite.phxsoftware.com/과 같은 .NET 용 SQLite 라이브러리를 사용하면 훨씬 쉽게 작업 할 수 있습니다. – MiffTheFox

+0

서버는 인터넷에서 절대 액세스 할 수 없으며 방화벽 뒤의 LAN에 있습니다. 클라이언트가 전체 쿼리를 보내는 대신 매개 변수를 사용하여 쿼리를 작성하는 방법을 살펴 보겠습니다. SQLite 서버를 찾을 수 없어서 내 서버를 빌드해야합니다. – Gulbahar

답변

3

: 같은 문제가 사람들을 위해

는 여기에 몇 가지 작업 코드입니다. 해당 사이트에 대한 쿼리 문자열을 통해 SQL을 허용하는 것은 매우 나쁜 생각입니다.

귀하의 질문에 대한 답은 웹 사이트를 다시 작성하여 매개 변수 만 쿼리 자체가 아닌 쿼리에 연결될 것으로 기대합니다.

코드 일부 다른 문제 :

  • 웹 클라이언트가는 IDisposable을 구현하고, 그래서 사용하여 블록을 작성해야
  • 나는 UploadData()는 아마도 호출하는 잘못된 기능입니다 생각 - 당신은 응답을 기대 서버에서 가져 왔니? 대신 DownloadString()을 사용해보십시오. 그것은 여전히 ​​귀하의 데이터를 게시 할 것입니다.
  • 의심의 여지를주고, "Exit Sub"라인이 디버깅을 위해 있다고 가정하겠습니다. 그러나 브레이크 포인트가 더 잘 작동 할 것이라고 언급 할 가치가 있습니다.
+0

IDisposable에 대한 정보 주셔서 감사합니다. 이 코드는 학습 목적으로 만 사용되며 실제 SQL 쿼리는 클라이언트가 보낸 매개 변수에서 서버에 의해 생성됩니다. – Gulbahar

관련 문제