2017-04-15 2 views
-1

Ich brauche Hilfe bitte. Ich habe meinen Körper, der gut mit Daten vor dem Kompilieren funktioniert.HttpWebRequest - Wie Variable dynamisch in diesen Körper gesetzt

Dim body As String = "{""travelForm"":[{""title"":""IT Unix 4"",""description"":""<p>Hello fjdsbfjsdhfkjn,vxnc bx vxnodjosidfjlkj kjk sds iufsyiufshkjdjxfoksjdkjfsiodhfsdhfsudhfskjdlfksjlfsjdkfhkjhjk hj hdkjfhksjdhfjkh kjh skjdhfkjsdhfkj hkjsdhfskjdskh jhsjdhfkjshdfjsdhkjfsdhkhsdkjsdhskjhfskjdhjshjdhfskjhskdhfkjdhfj hkjshdfsd</p>"",""phone"":""0199654128"",""categoryfont"":7459250,""categoryClass"":""Toyota"",""DataCategory"":100,""where"":{""latitude"":-33.8659683,""longitude"":18.534443499999952,""radius"":5000},""categoryAttributes"":[],""imageWeb"":[""c:\mypict100.JPG?set_id=8800005007""]}]}" 

aber wenn ich versuche, wie unter den variablen dinamycally (Form3.txtbx_title.Text) zu setzen, funktioniert es nicht.

Dim body As String = "{""travelForm"":[{""title"":"&Form3.txtbx_title.Text&",""description"":""<p>Hello fjdsbfjsdhfkjn,vxnc bx vxnodjosidfjlkj kjk sds iufsyiufshkjdjxfoksjdkjfsiodhfsdhfsudhfskjdlfksjlfsjdkfhkjhjk hj hdkjfhksjdhfjkh kjh skjdhfkjsdhfkj hkjsdhfskjdskh jhsjdhfkjshdfjsdhkjfsdhkhsdkjsdhskjhfskjdhjshjdhfskjhskdhfkjdhfj hkjshdfsd</p>"",""phone"":""0199654128"",""categoryfont"":7459250,""categoryClass"":""Toyota"",""DataCategory"":100,""where"":{""latitude"":-33.8659683,""longitude"":18.534443499999952,""radius"":5000},""categoryAttributes"":[],""imageWeb"":[""c:\mypict100.JPG?set_id=8800005007""]}]}" 

Bitte sehen Sie den ganzen Code unten

Imports System.Net 
 
Imports System.Text 
 
Imports System.IO 
 
Imports System.Diagnostics 
 
Imports System.IO.Compression 
 

 
Imports System.Net.WebUtility 
 

 

 
Module PostTravelForm 
 

 
    Public logincookiePost As CookieContainer 
 
    Dim logincookstring As String 
 

 
    Dim theWantedString As String 
 

 
    'Calls request functions sequentially. 
 
    Sub MakeRequests3() 
 
     Dim response As HttpWebResponse 
 
     Dim responseText As String 
 

 
     If Request_www_germany_com(response) Then 
 
      'Success, possibly use response. 
 
      responseText = ReadResponse(response) 
 

 
      response.Close() 
 
     Else 
 
      'Failure, cannot use response. 
 
     End If 
 
    End Sub 
 

 
    'Returns the text contained in the response. For example, the page HTML. Only handles the most common HTTP encodings. 
 
    Public Function ReadResponse(response As HttpWebResponse) As String 
 
     Using responseStream = response.GetResponseStream() 
 
      Dim streamToRead As Stream = responseStream 
 
      If response.ContentEncoding.ToLower().Contains("gzip") Then 
 
       streamToRead = New GZipStream(streamToRead, CompressionMode.Decompress) 
 
      ElseIf response.ContentEncoding.ToLower().Contains("deflate") Then 
 
       streamToRead = New DeflateStream(streamToRead, CompressionMode.Decompress) 
 
      End If 
 

 
      Using streamReader = New StreamReader(streamToRead, Encoding.UTF8) 
 
       Return streamReader.ReadToEnd() 
 
      End Using 
 
     End Using 
 
    End Function 
 
\t 
 
    ''' <summary> 
 
    ''' Tries to request the URL: https://www.travel.com/postad/create 
 
    ''' </summary> 
 
    ''' <param name="response">After the function has finished, will possibly contain the response to the request.</param> 
 
    ''' <returns>True if the request was successful; false otherwise.</returns> 
 
\t 
 
    Private Function Request_www_germany_com(ByRef response As HttpWebResponse) As Boolean 
 
     response = Nothing 
 

 
     Try 
 
      'Create request to URL. 
 
      Dim request As HttpWebRequest = DirectCast(WebRequest.Create("https://www.travel.com/api/postad/create"), HttpWebRequest) 
 
      Dim tempCookies As New CookieContainer 
 

 
      'Set request headers. 
 
      request.KeepAlive = True 
 
      request.Accept = "application/json, text/javascript, */*; q=0.01" 
 
      request.Headers.Add("Origin", "https://www.travel.com") 
 
      request.Headers.Add("x-requested-with", "XMLHttpRequest") 
 
      request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" 
 

 
      request.CookieContainer = logincookiePost 
 

 
      request.ContentType = "application/json" 
 
      request.Referer = "https://www.travel.com/post" 
 
      request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br") 
 
      request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.8") 
 

 
      'Set request method 
 
      request.Method = "POST" 
 

 
      ' Disable 'Expect: 100-continue' behavior. More info: http://haacked.com/archive/2004/05/15/http-web-request-expect-100-continue.aspx 
 
      request.ServicePoint.Expect100Continue = False 
 

 
      Console.WriteLine(Form3.txtbx_title.Text & " Test !!!!!!!!!!!!") 
 

 
      Dim txtbx As String = "<p>CISCO Senior Network Engineer</p>" 
 

 
      'Set request body. 
 
      
 
      Dim body As String = "{""ads"":[{""title"":""…" + txtbx + "…"",""description"":""<p>" + Form3.txtbx_descript.Text.Replace("""", "\""") + "</p>"",""phone"":""0799654128"",""categoryId"":9250,""categoryName"":""Computer Operators"",""parentCategory"":8,""location"":{""latitude"":-33.8659683,""longitude"":18.534443499999952,""radius"":2000},""categoryAttributes"":[],""imageUrls"":[""https://i.ebayimg.com/00/s/NjAwWDgwMA==/z/~qIAAOSwU8hY75kG/$_1.PNG?set_id=8800005007""]}]}" 
 

 

 
      Dim postBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(body) 
 
      request.ContentLength = postBytes.Length 
 
      Dim stream As Stream = request.GetRequestStream() 
 
      stream.Write(postBytes, 0, postBytes.Length) 
 
      stream.Close() 
 

 
      'Get response to request. 
 
      response = DirectCast(request.GetResponse(), HttpWebResponse) 
 
     Catch e As WebException 
 
      'ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found) 
 
      If e.Status = WebExceptionStatus.ProtocolError Then 
 
       response = DirectCast(e.Response, HttpWebResponse) 
 
      Else 
 
       Return False 
 
      End If 
 
     Catch e As Exception 
 
      If response IsNot Nothing Then 
 
       response.Close() 
 
      End If 
 
      Return False 
 
     End Try 
 

 
     Return True 
 
    End Function 
 

 
End Module

+0

_ "Es funktioniert nicht" _ ist eine sehr vage Problembeschreibung. Was passiert/passiert nicht? Wird 'Form3' durch Aufruf der Standardinstanz (' Form3.Show() ') geöffnet, oder wird es mit' New Form3' geöffnet und dann '.Show()' aufgerufen? –

+0

From3.txtbx_title.Text enthält nur eine Zeichenfolge. Form3 ist das Hauptformular. Ich versuchte auch die unten Dim txtbx As String = "CISCO Senior Network Engineer" Dim body Als String = "{" "travelForm" ": [{" "title" ":" "IT Unix 4" "," & txtbx & " : ""

Hallo fjdsbfjsdhfkjn, vxnc bx vxnodjosidfjlkj kjk sds iufsyiufshkjdjxfoksjdkjhkjshdfsd

"", "" Telefon "": "" 0199654128 "", "" categoryfont "": 7459250 "" categoryClass "": "" Toyota "",“ "Datenkategorie": 100, "wo": Breitengrad: 33,8659683, Längengrad: 18,534443499999952, Radius: 5000, Kategorieattribute: [], "imageWeb" ": [" "c: \ mypict100.JPG? set_id = 8800005007" "]}]}" –

+0

'Form3.txtbx_title.Text' ** kann nur ** eine Zeichenfolge enthalten! Er fragte _ ** was ** _ es enthält (was sein Wert ist), nicht _ ** welcher Typ ** _ es enthält/ist. - Definieren Sie wiederum _ _ "es funktioniert nicht" _. –

Antwort

1

Wenn Sie die JSON syntax studieren, werden Sie alle Objektschlüssel müssen Strings sein feststellen, dass. Das bedeutet, dass die Schlüssel in doublequotes (") richtig zitiert werden müssen. Daher

{ CISCO Senior Network Engineer: "<p>Hello…</p>" } 

ist ungültig JSON, während

{ "CISCO Senior Network Engineer": "<p>Hello…</p>" } 

gültig JSON ist.

Ihr Problem scheint zu sein, dass Sie nicht den Schlüssel angeben.

S.S .: Bitte beachten Sie, dass es nicht reicht, einfach Ihre Form3.txtbx_title.Text mit Doppelquoten zu umgeben. Sie müssen sicherstellen, dass, wenn der Benutzer Text eingegeben hat, der eine oder mehrere doublequotes enthält, jede davon mit Escapezeichen versehen werden muss, indem ein \ Zeichen vorangestellt wird.

+0

Danke für Ihren Kommentar. Ich weiß wirklich, dass ich doppelte Anführungszeichen für String setzen muss. Aber meine Sorge ist, dass ich Daten dynamisch laden muss.Also muss ich mit einer Variablen wie der folgenden arbeiten: 'Dim myVariable As String =" Cisco Network Network Engineer "Dim body As String =" {"" travelForm "": [{"" title "": "& myVariable &", "" Beschreibung "": ""

Hallo fjdsbfj iufsfsd

"" Telefon: 01 8 "," catfont "": 7459250, "" categoryC lass ":" " Toyota, DataCat: 100, wo: Breite: -33,8, Länge: 18,5, Radius: 5 0}, "" KategorieAttri "": [], "" imageWe b "": ["" c: \ mypict10.JPG? Set_id = 88 ""]}]} " ' –

+0

'" ... "+ meineVariable +" ... "' => '" ... "" "+ meineVariable.Replace (" "" "," \ "" ") +" "" ... "' – stakx

+0

DANKE SOOOOOO MUCHHHHHHH Herr stakx !!! Ich habe die zweite verwendet, da meine Variable eine Zeichenkette ist, so dass sie alle Zeichen enthalten muss, einschließlich Anführungszeichen und was auch immer und funktionierte gut. Ob ich den zweiten benutze, muss ich mich nicht mehr um die Benutzereingabe kümmern? oder einige Zeichen sollten nicht vom Benutzer eingegeben werden? Ich schätze deine Hilfe, Sir. –