كيف تجبر المتصفح على استخدام المنصب عند الحصول على url?

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

  •  22-07-2019
  •  | 
  •  

سؤال

كيف تجبر المتصفح على استخدام المنصب عند الحصول على url?

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

المحلول

استخدم نموذج HTML يحدد آخر كأسلوب:

<form method="post" action="/my/url/">
    ...
    <input type="submit" name="submit" value="Submit using POST" />
</form>

إذا <م> قد لتحقيق ذلك كحلقة وصل (غير مستحسن)، يمكن أن يكون لديك معالج عند النقر بناء حيوي شكل وتقديمه.

<script type="text/javascript">
function submitAsPost(url) {
    var postForm = document.createElement('form');
    postForm.action = url;
    postForm.method = 'post';
    var bodyTag = document.getElementsByTagName('body')[0];
    bodyTag.appendChild(postForm);
    postForm.submit();
}
</script>
<a href="/my/url" onclick="submitAsPost(this.href); return false;">this is my post link</a>

إذا كنت بحاجة إلى تطبيق هذا على جانب الملقم، يجب عليك التحقق من طريقة HTTP وإذا لم يكن يساوي وظيفة، إرسال <لأ href = "http://www.checkupdown.com/status/E405.html "يختلط =" noreferrer "> HTTP 405 رمز الاستجابة (أسلوب غير مسموح) إلى المستعرض والخروج. بالضبط كيف يمكنك تنفيذ ذلك سيعتمد على لغتك البرمجة / الإطار، وما إلى ذلك.

نصائح أخرى

<form method="post">

إذا كنت الحصول على URL، وكنت الحصول عليه، وليس نشرها. أنت بالتأكيد لا يمكن أن يسبب المتصفح لإصدار طلب وظيفة عبر شريط موقعه.

لدي شعور من سؤالك أنك كنت آمل إرسال طلب post في شريط عناوين المتصفح.

فقط اكتب ما يلي في شريط العنوان مبادلة قيمة 'العمل' إلى عنوان url الذي تريد.

data:text/html,<body onload="document.body.firstChild.submit()"><form method="post" action="http://stackoverflow.com">

انها غير صالحة html, ولكن المتصفح (على الأقل في كل منها لقد اختبرت ذلك في حتى الآن) أعرف ماذا تقصد ، و أردت أن يبقيه قصيرة قدر ما استطعت.

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

<input value="hugh.mahn@person.com" name="email">
<input value="passwordsavedinhistory" name="password">

من المهم أن نلاحظ أن المعلومات الحساسة لك وظيفة سوف تكون مرئية في:

  • التاريخ
  • شريط العنوان
  • المتصفح الخاص بك "الإكمال التلقائي".
  • وربما غيرها من المواقع التي تزورها من نفس التبويب
  • ربما الكثير من الأشياء الأخرى أيضا

انها سيئة حقا طريقة إرسال طلب post و كل الأجوبة الأخرى هي أفضل بكثير, ولكن انها لا تزال باردة أن يمكنك أن تفعل ذلك.

إذا كنت تحاول اختبار شيء، كنت أقترح استخدام عازف الكمان للصياغة طلبات HTTP الخاص بك . وسوف تسمح لك لتحديد الفعل العمل (GET، POST أو PUT، DELETE، الخ) وكذلك محتويات الطلب. إذا كنت تحاول اختبار طلب خاص جدا من وصلة ولكن مع وظيفة بدلا من ذلك، ثم يمكنك مراقبة طلبات يجعل المتصفح الخاص بك وإعادة إرساله فقط مع عمل ما بعد تعديلها.

لا يمكن فرض أي متصفح ويب لإرسال رابط مع رأس POST. ولكن لاختبار رابط طلب POST، يمكنني أن أقترح "POSTER" ارشادية من href="https://chrome.google.com/webstore/detail/chrome-poster/cdjfedloinmbppobahmonnjigpmlajcd" الكروم موزيلا

وظيفة submitAsPost فوق () هو حل جيد وأنيق ولكنه لديه مشكلة - إذا كان URL طويل جدا بعض المتصفحات (بما في فايرفوكس وإنترنت إكسبلورر) سيعود خطأ. لأن العديد منا استخدام وظيفة من أجل تجاوز هذا القيد جدا، وأنا أقترح هذا الحل:

// submit a URL using post
function submitAsPost(url) {
    var bodyTag = document.getElementsByTagName('body')[0];
    var postForm = document.createElement('form');
    bodyTag.appendChild(postForm);
    postForm.method = 'POST';

    var serverAndParams = url.split("?");
    postForm.action = serverAndParams[0];
    var params = null;
    try
    {
      var paramsAndHash = serverAndParams[1].split("#");
      params = paramsAndHash[0]; 
      var attrList = params.split("&");
      for (var i = 0; i < attrList.length; i++)
      {
        try
        {
          var keyValue = attrList[i].split("=");
          var el = document.createElement('input');
          el.type="hidden";
          el.name=keyValue[0];
          var value = keyValue[1];
          value = value.replace(/\+/g, ' ');
          el.value=decodeURIComponent(value);
          postForm.appendChild(el);
        }
        catch(error){}
      } 
    }
    catch(error){}

    postForm.submit();
    bodyTag.removeChild(postForm);
}

واختبار مع فايرفوكس، كروم وإنترنت إكسبلورر.

ويمكنك استخدام أداة لاختبار. أنا أسأل دائما السؤال نفسه كما كنت. هناك عدد غير قليل من الأدوات المتاحة على شبكة الإنترنت. هنا هو الأداة التي تستخدم: http://www.hurl.it/

وأعرف أن هذا السؤال هو قديم ولكن شخص ما قد تجد هذا مفيدا. يمكنك استخدام أداة سطر الأوامر مثل الضفيرة ( http://curl.haxx.se/ ) لنشر ل وURL.

مثال:

curl -v  --basic --user username:password --request POST "http://www.theurltopostto.com"

وهذا هو قليلا في وقت متأخر من المباراة ولكن جريت عبر هذا وجدت أن HTML 5 جعلت بعض التغييرات. يمكنك استخدام علامة الإدخال لإضافة formmethod (آخر وبالتالي اختيار). هذا العمل بالنسبة لي.

وانظر: http://www.w3schools.com/tags/att_input_formmethod.asp

إذا كان لديك مشكلة بهذا الأمر:

request.open('POST',url,true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send("data="+JSON.stringify(data));

ووأدوات ديف كنت لا تزال حد ذاتها تقوم به ليحصل بعد ذلك وهذا يعني أن عنوان موقعك هو في الشكل التالي:

http://example.com/folder

وهذا يعني أنه يجب أن تكون:

http://example.com/folder/

عن خطأ غريب جدا ربما لا علاقة للسؤالك ولكن أنا لقد كان له بضع مرات، وأنه ينبغي أن يكون هناك كما يبدو خطرا على محمل الجد. هذا ما حدث لي عند استخدام خادم اباتشي 2 على أوبونتو 14.04، مع ليس كثيرا التكوين.

والأداة المساعدة " عازف الكمان " حسب Telerik (وير الحرة) يسمح لك "يؤلف" على HTTP طلب وإرساله باستخدام أي الطريقة التي تختارها (احصل على المشاركة، ضع، ديل، الخ) وأيضا سوف اعطيكم بعض المعلومات مفصلة جدا حول الطلب والاستجابة التي يمكن أن تكون مفيدة جدا أثناء الاختبار والتصحيح

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