2017-09-09 13 views
6

मैं एक ब्राउज़र खेल पर परीक्षण कर रहा हूँ। यह पोस्ट अनुरोध एक इमारत बनाने के लिए आदेश जारी करने का अनुमान है। जब तक मैं लॉग इन हूं, मैं पोस्टमैन भेजें बटन पर क्लिक कर सकता हूं और यह ठीक काम करता है। इसका मतलब है कि मूल्यों में से कोई भी समाप्त नहीं होता है। लेकिन अगर मैं लॉग आउट करता हूं और वापस लॉग इन करता हूं तो यह काम नहीं करेगा। मैं interceptor के माध्यम से एक और डाकिया पद उत्पन्न करने के लिए होगा।सी में अनुकरण डाकिया पोस्ट # - RestSharp

मैं इस पोस्ट अनुरोध को सी # का उपयोग करना अनुकरण करना चाहता हूं;

यहां पोस्टमैन में मेरी पोस्ट कैसी दिखती है; डाकिया में डाकिया enter image description here

शारीरिक पैरामीटर में

हेडर enter image description here

आप डाकिया स्थापित है, तो अनुरोध आयात करने के लिए here क्लिक करें।

यहां मेरा सी # कोड है। मैं पुस्तकालय RestSharp कहा जाता है का उपयोग कर रहा;

var client = new RestClient(@"https://tr42.klanlar.org"); 
var request = new RestRequest("game.php", Method.POST); 
request.AddQueryParameter("village", "31413"); // adds to POST or URL querystring based on Method 
request.AddQueryParameter("screen", "main"); // adds to POST or URL querystring based on Method 
request.AddQueryParameter("ajaxaction", "upgrade_building"); // adds to POST or URL querystring based on Method 
request.AddQueryParameter("type", "main"); // adds to POST or URL querystring based on Method 
request.AddQueryParameter("h", "98e34aa6"); // adds to POST or URL querystring based on Method 
request.AddQueryParameter("", ""); // adds to POST or URL querystring based on Method 
request.AddQueryParameter("client_time", "1505659914"); // adds to POST or URL querystring based on Method 

request.AddParameter("destroy", "0"); // adds to POST or URL querystring based on Method 
request.AddParameter("force", "1"); // adds to POST or URL querystring based on Method 
request.AddParameter("id", "wood"); // adds to POST or URL querystring based on Method 
request.AddParameter("source", "31413"); // adds to POST or URL querystring based on Method 

//var p1 = new Parameter 
//{ 
// ContentType = "application/x-www-form-urlencoded", 
// Name = "destroy", 
// Value = "0" 
//}; 
//request.AddParameter(p1); 

//var p2 = new Parameter 
//{ 
// ContentType = "application/x-www-form-urlencoded", 
// Name = "force", 
// Value = "1" 
//}; 
//request.AddParameter(p2); 

//var p3 = new Parameter 
//{ 
// ContentType = "application/x-www-form-urlencoded", 
// Name = "id", 
// Value = "wood" 
//}; 
//request.AddParameter(p3); 

//var p4 = new Parameter 
//{ 
// ContentType = "application/x-www-form-urlencoded", 
// Name = "source", 
// Value = "31413" 
//}; 
//request.AddParameter(p4); 


request.AddHeader("Accept-Language", "en-US,en;q=0.8,tr;q=0.6,ht;q=0.4"); 
request.AddHeader("Accept-Encoding", "gzip, deflate, br"); 
request.AddHeader("Referer", "https://tr42.klanlar.org/game.php?village=31413&screen=main"); 
//request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); 
request.AddHeader("Tribalwars-Ajax", "1"); 
request.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"); 
request.AddHeader("X-Requested-With", "XMLHttpRequest"); 
request.AddHeader("Origin", "https://tr42.klanlar.org"); 
request.AddHeader("Accept", "application/json, text/javascript, */*; q=0.01"); 


//request.AddParameter("application/x-www-form-urlencoded", "destroy=&force=&id=&source="); 
//request.AddParameter("application/x-www-form-urlencoded", "destroy=0&force=1&id=31413&source=wood", ParameterType.RequestBody); 
//request.AddBody("application/x-www-form-urlencoded", "destroy=0&force=1&id=31413&source=wood"); 
IRestResponse response = client.Execute(request); 
var data = response.Content; 

जब मैं पर क्लिक करें डाकिया अंदर भेजें बटन, कार्रवाई काम करता है। हालांकि, भले ही मैं अलग अलग तरीकों का गुच्छा की कोशिश की, मैं नहीं मेरी सी # समारोह काम कर रहे हो सकता है।

किसी भी तरह की पुस्तकालयों में गंदे चाल और इतने पर उपयोग की अनुमति है। जब तक अनुरोध सी # भाषा का उपयोग करते हुए एक कार्यक्रम संबंधी तरीके से काम करता कोई नियम नहीं हैं।

मुझे एक प्रतिक्रिया शुरू होने की उम्मीद है;

{ "सफलता": "। Komut verildi", "date_complete": 86, "date_complete_formated": "00:01:26", "building_orders": "

संपादित करें: मैं वैकल्पिक तरीकों इस पोस्ट अनुरोध को दिखाने का उपयोग कर सकते हैं यह RestSharp में होने की जरूरत नहीं है

संपादित करें 2:।। मैं अपने मानकों को हर बार लॉग इन करने अपडेट करेगा ताकि आप समस्या मैं कर रहा हूँ पुन: पेश कर सकते हैं।

संपादित करें 3: पोस्टमैन RestSharp का उपयोग कर सी # कोड उत्पन्न करने में सक्षम है। यह वह कोड है जो पोस्टमैन उत्पन्न करता है। हालांकि यह काम नहीं करता है।

var client = new RestClient("https://tr42.klanlar.org/game.php?village=31413&screen=main&ajaxaction=upgrade_building&type=main&h=8951b405&=&client_time=1505062595"); 
var request = new RestRequest(Method.POST); 
request.AddHeader("postman-token", "dab31db4-b243-c317-e585-19da84c11e62"); 
request.AddHeader("cache-control", "no-cache"); 
request.AddHeader("accept-language", "en-US,en;q=0.8,tr;q=0.6,ht;q=0.4"); 
request.AddHeader("accept-encoding", "gzip, deflate, br"); 
request.AddHeader("referer", "https://tr42.klanlar.org/game.php?village=31413&screen=main"); 
request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
request.AddHeader("tribalwars-ajax", "1"); 
request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"); 
request.AddHeader("x-requested-with", "XMLHttpRequest"); 
request.AddHeader("origin", "https://tr42.klanlar.org"); 
request.AddHeader("accept", "application/json, text/javascript, */*; q=0.01"); 
IRestResponse response = client.Execute(request); 

मैंने देखा कि पोस्टमैन जेनरेट कोड में बॉडी पैरामीटर नहीं रख रहा है।

+0

क्यों का उपयोग 'HttpClient' नहीं? – John

+0

@ जॉन मैं तब तक कुछ भी उपयोग करने के लिए खुला हूं जब तक यह काम करता है। यदि आप HttpClient Ill का उपयोग कर उत्तर प्रदान कर सकते हैं तो इसे आज़माएं। RestSharp व्यापक रूप से उपयोग किया जा रहा है और चीजों को आसान बनाने के लिए माना जाता था। – 0014

+1

आप जिस समस्या का सामना कर रहे हैं? क्वेरी में कई "गतिशील" पैरामीटर हैं, और मैं इसका परीक्षण नहीं कर सकता, जैसे कुकी के अंदर उपयोगकर्ता टोकन समाप्त हो सकता है, टाइमस्टैम्प। आपको इसे और अधिक विशिष्ट वर्णित करने की आवश्यकता है। और आपको अपने पोस्ट अनुरोध में प्रत्येक शीर्षलेख जोड़ने की आवश्यकता नहीं है, कुछ शीर्षलेख आवश्यक हैं, स्वीकार करें, कुकी। और मुझे लगता है कि आपको 'सामग्री-प्रकार' शीर्षलेख जोड़ने की आवश्यकता नहीं है, बाकी Sharp आपके लिए – John

उत्तर

3

उनकी सलाह फ़िडलर का उपयोग करने के साथ CodeCaster के लिए धन्यवाद, मैं HttpWebRequest का उपयोग कर अनुरोध करने के लिए कर रहा था। इस अद्भुत Fiddler tool कि सी # कोड में अनुरोध परिवर्तित करता है।

तो इस तरह मैंने इस समस्या को हल किया;

  • स्थापित फ़िडलर
  • Fiddler का उपयोग कर पोस्ट अनुरोध कब्जा कर लिया
  • स्थापित this Fiddler विस्तार
  • सी # कोड है जो इस तरह दिखता में Fiddler अनुरोध परिवर्तित;

    private void MakeRequests() 
    { 
        HttpWebResponse response; 
    
        if (Request_tr42_klanlar_org(out response)) 
        { 
         response.Close(); 
        } 
    } 
    
    private bool Request_tr42_klanlar_org(out HttpWebResponse response) 
    { 
        response = null; 
    
        try 
        { 
         HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://tr42.klanlar.org/game.php?village=31413&screen=main&ajaxaction=upgrade_building&type=main&h=561d76fe&&client_time=1505677450"); 
    
         request.KeepAlive = true; 
         request.Accept = "application/json, text/javascript, */*; q=0.01"; 
         request.Headers.Add("Origin", @"https://tr42.klanlar.org"); 
         request.Headers.Add("X-Requested-With", @"XMLHttpRequest"); 
         request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"; 
         request.Headers.Add("TribalWars-Ajax", @"1"); 
         request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; 
         request.Referer = "https://tr42.klanlar.org/game.php?village=31413&screen=main"; 
         request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); 
         request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.8,tr;q=0.6,ht;q=0.4"); 
         request.Headers.Set(HttpRequestHeader.Cookie, @"cid=1584941605; tr_auth=e341b46da1e7:13bc09020be8c378853c70baaa54ed9849c029468a62a143d10868e4238fa1af; cid=1584941605; tr_auth=e341b46da1e7:13bc09020be8c378853c70baaa54ed9849c029468a62a143d10868e4238fa1af; ref4852238=start; _ga=GA1.2.766176105.1499529449; _gid=GA1.2.1638517063.1505659564; __utmt=1; __utma=37229925.766176105.1499529449.1505094554.1505659568.8; __utmb=37229925.10.10.1505659568; __utmc=37229925; __utmz=37229925.1505659568.8.3.utmcsr=klanlar.org|utmccn=(referral)|utmcmd=referral|utmcct=/; sid=0%3A12986160bd90; _ga=GA1.2.766176105.1499529449; _gid=GA1.2.1638517063.1505659564; __utma=37229925.766176105.1499529449.1505094554.1505659568.8; __utmb=37229925.11.10.1505659568; __utmc=37229925; __utmz=37229925.1505659568.8.3.utmcsr=klanlar.org|utmccn=(referral)|utmcmd=referral|utmcct=/; websocket_available=true; global_village_id=31413; mobile=0"); 
    
         request.Method = "POST"; 
         request.ServicePoint.Expect100Continue = false; 
    
         string body = @"id=stone&force=1&destroy=0&source=31413"; 
         byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); 
         request.ContentLength = postBytes.Length; 
         Stream stream = request.GetRequestStream(); 
         stream.Write(postBytes, 0, postBytes.Length); 
         stream.Close(); 
    
         response = (HttpWebResponse)request.GetResponse(); 
        } 
        catch (WebException e) 
        { 
         if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; 
         else return false; 
        } 
        catch (Exception) 
        { 
         if (response != null) response.Close(); 
         return false; 
        } 
        return true; 
    } 
    
+1

यह कुकी तब समाप्त हो जाएगी जब वह कुकी समाप्त हो जाती है, और इससे भी बदतर, अब आपने अपनी ऑथ कुकी को दुनिया में दिखाया है। – CodeCaster

+0

@codecaster हां यह एक ब्राउज़र गेम टेस्ट है जो मेरी फ्रेंड को accout, चिंता करने की कोई ज़रूरत नहीं है। यदि आप सवाल पढ़ते हैं तो आप देखेंगे कि मैं शुरुआत से स्थिति से अवगत था। मैंने वैसे भी अपना सत्र समाप्त कर दिया, कोड एक विचार देने के लिए वहां काम नहीं करता है। – 0014

+0

@ 0014 आप 2 कोड के लिए इस कोड को बदल सकते हैं। ऑथ कुकी को पुनः प्राप्त करने के लिए लॉगिन करने का अनुरोध और फिर बाद के अनुरोधों में ऑथ कुकी का उपयोग करें। –

संबंधित मुद्दे