سؤال

استمر في الحصول على هذا:

V/RESPONSE(13605):  {
V/RESPONSE(13605):  "error": {
V/RESPONSE(13605):   "errors": [
V/RESPONSE(13605):    {
V/RESPONSE(13605):     "domain": "global",
V/RESPONSE(13605):     "reason": "parseError",
V/RESPONSE(13605):     "message": "This API does not support parsing form-encoded input."
V/RESPONSE(13605):    }
V/RESPONSE(13605):   ],
V/RESPONSE(13605):   "code": 400,
V/RESPONSE(13605):   "message": "This API does not support parsing form-encoded input."
V/RESPONSE(13605):  }
V/RESPONSE(13605): }

باستخدام هذا الرمز:

String apiKey = "blahblahblah";
String address="https://www.googleapis.com/urlshortener/v1/url";
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(address);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("key", apiKey));
pairs.add(new BasicNameValuePair("longUrl", original));

try {
    post.setEntity(new UrlEncodedFormEntity(pairs));
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

try {
    org.apache.http.HttpResponse response = client.execute(post);
    String responseBody = EntityUtils.toString(response.getEntity());
    Log.v("RESPONSE"," "+responseBody);
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    tinyUrl="Protocol Error";
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    tinyUrl="IO Error";
}

لست متأكدًا من كيفية تنسيق هذا.أيه أفكار؟

حاولت إزالة UrlEncodedFormEntity, ، ولكن بالطبع لن ينجح ذلك.

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

المحلول

تحتاج إلى إرسال البيانات بتنسيق json، وليس بصيغة مشفرة كما تحاول القيام بذلك.

ألق نظرة على الوثائق هنا.

قم بتغيير الكيان ليصبح StringEntity مثل هذا:

post.setEntity(new StringEntity("{\"longUrl\": \"http://www.google.com/\"}"));

قم أيضًا بتعيين نوع محتوى الطلب:

post.setHeader("Content-Type", "application/json");

نصائح أخرى

ضع في اعتبارك أيضًا استخدام مكتبة قمت بإنشائها والتي توفر واجهة رائعة لتقصير عناوين URL الخاصة بك باستخدام خدمة Goo.gl.

وهو يدعم مفتاح API وهو سهل الاستخدام للغاية:

GoogleShortenerPerformer shortener = new GoogleShortenerPerformer(new OkHttpClient());

String longUrl = "http://www.andreabaccega.com/";

GooglShortenerResult result = shortener.shortenUrl(
    new GooglShortenerRequestBuilder()
        .buildRequest(longUrl)
    );
if ( Status.SUCCESS.equals(result.getStatus()) ) {
    // all ok result.getShortenedUrl() contains the shortened url!
}

نلقي نظرة على جيثب الريبو هنا الذي يحتوي على مزيد من المعلومات :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top