كيف يمكنني إضافة معلمات الاستعلام إلى GetMethod (باستخدام جافا المشاعات-HttpClient وإصلاحه)؟

StackOverflow https://stackoverflow.com/questions/217070

  •  03-07-2019
  •  | 
  •  

سؤال

وعن طريق أباتشي العموم-HttpClient وإصلاحه لجاوا، ما هي أفضل طريقة لإضافة معلمات الاستعلام إلى مثيل GetMethod؟ إذا أنا باستخدام PostMethod، انها واضحة جدا:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

وGetMethod ليس لديها "addParameter" الأسلوب، وإن كان. لقد اكتشفت أن هذا يعمل:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

ولكن، معظم الأمثلة التي رأيتها إما بشق رمز المعلمات مباشرة في URL، منها مثلا:

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

وأو رمز الصعب سلسلة الاستعلام، منها مثلا:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

هل واحد من هذه الأنماط يفضل أن يكون؟ ولماذا هذا التناقض بين API PostMethod وGetMethod؟ وما هي كل تلك الأساليب HttpMethodParams أخرى يراد استخدامها ل؟

هل كانت مفيدة؟

المحلول

وأساليب المشاركة لها المعلمات آخر، ولكن الحصول على الأساليب لا .

هي جزء لا يتجزأ

والمعلمات الاستعلام في URL. الإصدار الحالي من HttpClient وإصلاحه يقبل سلسلة في المنشئ. إذا أردت إضافة مفتاح، زوج القيمة أعلاه، هل يمكن استخدام:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

ويمكن الاطلاع على انطلاق تعليمي جيد في صفحة أباتشي جاكرتا العموم .

على تحديث : في. كما اقترح في التعليق، ويعمل NameValuePair

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

نصائح أخرى

وانها ليست مجرد مسألة تفضيل شخصي. المسألة ذات الصلة هنا هو قيم المعلمات، بحيث القيم لن يحصل تلف أو يساء تفسيرها كمحددات اضافية، وترميز URL الخ.

وكما هو الحال دائما، فمن الأفضل لقراءة وثائق API في التفاصيل: <وأ href = "http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpMethodBase.html#setQueryString (org.apache.commons.httpclient.NameValuePair [])" يختلط = "noreferrer"> HttpClient وإصلاحه API الوثائق

وقراءة هذا، يمكنك أن ترى أن setQueryString(String) ولن URL ترميز أو ترسيم المعلمات الخاصة والقيم، في حين setQueryString(NameValuePair[]) تلقائيا URL ترميز وترسيم أسماء المعلمات والقيم. هذا هو أفضل طريقة كلما كنت تستخدم البيانات الديناميكية، لأنها قد تحتوي على الوات، علامات المساواة، وما إلى ذلك.

وحاول الامر بهذه الطريقة:

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top