Coldfusion cfhttp - иметь URL-адрес var, который нарушает функцию get - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь выполнить публикацию cfhttp, и мне нужно включить URL-адрес в переменные URL-адреса, чтобы указать, где разместить квитанцию ​​о доставке.

Вот мой код:

    <cfhttp result="CFHTTP" method="GET" url="http://xxxxxxxxxxx/send-sms.php?sender=#numbers.number#&to=#get_sms.receiver#&message=#get_sms.msgdata#&dlr-url=#get_sms.dlr_url#">
    <cfhttpparam type="formfield" name="sender" value="#numbers.number#">
    <cfhttpparam type="formfield" name="to" value="#get_sms.receiver#">
    <cfhttpparam type="formfield" name="message" value="#get_sms.msgdata#">
    <cfhttpparam type="formfield" name="dlr-url" value="#get_sms.dlr_url#">
</cfhttp> 

И все работает, если я не включу dlr_url, который похож на следующий:

http://entry.xxxxxxxx.com/process_dlr.cfm?status=%d&msisdn=%p&dlr-mask=31&data=%a&batchid=161F3CE3-E031-9CFF-7364A9C1AC50AA5B&destination=2&accountID=123&sub_id=123456789&carrierID=2222

Я могу только предположить, что такие элементы, как "? " и "&" нарушили бы процесс. Есть идеи, как выполнить sh это?

Спасибо всем за любую помощь.

Ответы [ 2 ]

5 голосов
/ 10 июля 2020

Здесь есть несколько fl aws.

  1. Не указывайте параметры запроса вручную в атрибуте url. Вместо этого используйте <cfhttpparam param type="url".
  2. Запрос GET не поддерживает тело (данные формы), поэтому <cfhttpparam type="formfield" ничего не сделает.
  3. Почему вы даже пытаетесь отправить те же параметры через строку запроса И тело?

Если вы используете правильные теги cfhttpparam, вам не нужно кодировать значения вручную.

Правильный запрос с параметрами через строку запроса

<cfhttp result="CFHTTP" method="GET" url="http://xxxxxxxxxxx/send-sms.php">
    <cfhttpparam type="url" name="sender"  value="#numbers.number#">
    <cfhttpparam type="url" name="to"      value="#get_sms.receiver#">
    <cfhttpparam type="url" name="message" value="#get_sms.msgdata#">
    <cfhttpparam type="url" name="dlr-url" value="#get_sms.dlr_url#">
</cfhttp> 

Правильный запрос с параметрами через строку запроса И тело

<cfhttp result="CFHTTP" method="POST" url="http://xxxxxxxxxxx/send-sms.php">
    <cfhttpparam type="url"       name="sender"  value="#numbers.number#">
    <cfhttpparam type="url"       name="to"      value="#get_sms.receiver#">
    <cfhttpparam type="url"       name="message" value="#get_sms.msgdata#">
    <cfhttpparam type="url"       name="dlr-url" value="#get_sms.dlr_url#">
    <cfhttpparam type="formfield" name="sender"  value="#numbers.number#">
    <cfhttpparam type="formfield" name="to"      value="#get_sms.receiver#">
    <cfhttpparam type="formfield" name="message" value="#get_sms.msgdata#">
    <cfhttpparam type="formfield" name="dlr-url" value="#get_sms.dlr_url#">
</cfhttp>

Разница: POST позволяет строку запроса и полезную нагрузку тела. GET допускает только строку запроса.

Я предполагаю, что вы более знакомы с PHP, поэтому вот как переводится атрибут type:

  • type="url" name="sender" => $_GET['sender']
  • type="formfield" name="sender" => $_POST['sender']
0 голосов
/ 10 июля 2020

Я не понимаю, о чем я думал ....

Требуется кодирование: #URLEncodedFormat(get_sms.dlr_url)#

Извините, я не подумал о благодарности !!!

...