iT邦幫忙

0

ajax 可以呼叫 php 取值 想用 curl 呼叫 php 取值該如何寫?

用 ajax 丢 json 呼叫 php

url: "server.php", //傳送目的地
dataType: "json", //資料格式
data: { //傳送資料
    name: $("#name").val(), //表單欄位 ID name
    passid: $("#passid").val() //表單欄位 ID passid
},
success: function(data) {
    if (data.name) { //如果後端回傳 json 資料有 name
        $("#datainput")[0].reset(); //重設 ID 為 datainput 的 form (表單)
        $("#result").html('<font color="#007500">您名字與ID : <font color="#0000ff">' + data.name + '</font: <font color="#0000ff">' + data.passid + '</font></font>');
    } else { //否則讀取後端回傳 json 資料 errorMsg 顯示錯誤訊息
        $("#datainput")[0].reset(); //重設 ID 為 datainput 的 form (表單)
        $("#result").html('<font color="#ff0000">' + data.errorMsg + '</font>');
    }
},
error: function(jqXHR) {
    $("#datainput")[0].reset(); //重設 ID 為 datainput 的 form (表單)
    $("#result").html('<font color="#ff0000">發生錯誤:' + jqXHR.status + '</font>');
}

server.php

<?php
header('Content-Type: application/json; charset=UTF-8'); //設定資料類型為 json,編碼 utf-8
if ($_SERVER['REQUEST_METHOD'] == "POST") { //如果是 POST 請求
    @$name = $_POST["name"]; //取得 name POST 值
    @$passid = $_POST["passid"]; //取得 passid POST 值
        echo json_encode(array(
            'name' => $name,
            'passid' => $passid ));
} else {
    //回傳 errorMsg json 資料
    echo json_encode(array(
        'errorMsg' => '請求無效,只允許 POST 方式訪問!'
    ));
}
?>

這部分沒有問題

用 curl 一直無法成功 或用Postman 也是無法成功

curl -H "Content-Type: application/json" \
  -X POST \
  --data '{"name":"tryit","passid":"password"}' \
  http://127.0.0.1:50080/server.php

那 curl 要如何寫才會成功 ?

2 個回答

1
海綿寶寶
iT邦超人 1 級 ‧ 2019-04-09 11:06:14
最佳解答

由於你 php 寫的是以 FORM 的方式接收資料
所以就要用原始 key=value 的格式傳資料

curl -X POST \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "name=ithelp&passid=7ujmnhgc" \
     http://127.0.0.1:50080/server.php

如果你要用 json 的格式收送資料
可以參考這篇

echochio iT邦研究生 4 級 ‧ 2019-04-09 11:22:04 檢舉

這樣寫完整多了 ...
拘泥於 jsonn送怪不得試不出來感謝

echochio iT邦研究生 4 級 ‧ 2019-04-09 11:55:01 檢舉

問一下 Postman 要如何測試
https://ithelp.ithome.com.tw/upload/images/20190409/201106115lnABksQEc.png

echochio iT邦研究生 4 級 ‧ 2019-04-09 12:21:49 檢舉

搞定了原來放 Body
https://ithelp.ithome.com.tw/upload/images/20190409/20110611imuBPjSbA9.png

https://ithelp.ithome.com.tw/upload/images/20190409/20110611uc1OMvmyzB.png

0
froce
iT邦大師 6 級 ‧ 2019-04-09 10:57:35
curl "http://127.0.0.1:50080/server.php" --data "name=tryit&passid=password"

有帶data的,curl應該會自動認為是post
然後 chrome 的開發者模式的network頁面,可以直接copy request成curl命令...

echochio iT邦研究生 4 級 ‧ 2019-04-09 11:15:06 檢舉

原來是拘泥於 jsonn送怪不得試不出來感謝

我要發表回答

立即登入回答