> 백엔드 개발 > PHP 튜토리얼 > php怎么写服务端获取 客户端发来的json

php怎么写服务端获取 客户端发来的json

WBOY
풀어 주다: 2016-06-23 14:22:11
원래의
1089명이 탐색했습니다.

我客户端是用 libcurl 库的  用http 给服务端发出请求的 不是用socket的  PHP应该怎么写才能收到请求


回复讨论(解决方案)

你先
file_put_contents('test.txt', 'get:' . print_r($_GET, 1) . 'post:' . print_r($_POST, 1));
看看 test.txt 中哪段有内容

如果使用的是HTTP协议的GET方法,数据保存在$_GET数组中.
如果使用的是HTTP协议的POST方法,数据通常保存在$_POST数组中.
注:如果post方法没有指出数据类型,提交的数据可以通过$HTTP_RAW_POST_DATA获取.

找到数据后可以通过json_decode函数处理下即可转换成数组或对象.

直接输出
print_r($_POST);ECHO "111";
pint_r($_GET);

你先
file_put_contents('test.txt', 'get:' . print_r($_GET, 1) . 'post:' . print_r($_POST, 1));
看看 test.txt 中哪段有内容

print_r($_POST, 1) 我直接打这个什么都没看到。。。 奇怪 我客户端就是发的是字符串 

你直接 print_r($_POST) 给谁看?给客户端?
那你客户端有显示回传数据的代码吗?

所以我让你 print_r($_POST, 1) 到文件,这样才好检查呀

get:Array
(
)
post:Array
(
)
我收到的是这个哈 还是什么都没有..蛋疼

你直接 print_r($_POST) 给谁看?给客户端?
那你客户端有显示回传数据的代码吗?

所以我让你 print_r($_POST, 1) 到文件,这样才好检查呀
get:Array
(
)
post:Array
(
)
我收到的是这个哈 还是什么都没有..蛋疼


file_put_contents('test.txt', file_get_contents('php://input'));
看看

进来学习的,抱歉,没帮到忙


file_put_contents('test.txt', file_get_contents('php://input'));
看看

什么都没有了..

你能确定客户端发了数据吗?

确定  是不是解码问题的 我客户端是用c++ libcurl post发的    

你能确定客户端发了数据吗? 确定  是不是解码问题的 我客户端是用c++ libcurl post发的    

你都没有收到数据,何来的解码?

有可能的话,请贴出 C++ 的代码片段

有可能的话,请贴出 C++ 的代码片段

#include "HHttp.h"
#include "json.h"
//导入curl头文件
#include "../libs/cocos2dx/platform/third_party/ios/curl/curl.h"

bool HHttp::pServer(){
    //------------------------
    CURL *curl; // 初始化 CURL 结构
CURLcode res;
    
    res = curl_global_init(CURL_GLOBAL_ALL);//初始化所有的可能的调用。
    if (res != CURLE_OK)
    {
        printf( "Failed to global init default [%d]\n", res );
        return false;
    }
    
// curl = curl_easy_init();
//    Json::FastWriter writer;
//    Json::Value root;
//    root["action"] = "device";
//      std::string json_file=writer.write(root);
if (curl)
{

         std::string cc; 
        curl_easy_setopt( curl, CURLOPT_URL, "http://127.0.0.1/ceshi/ceshi.php"); //请求的地址
        curl_easy_setopt(curl, CURLOPT_POST, true);                     //启用POST提交
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "account=zhycheng"); //发送的数据
        curl_easy_setopt( curl, CURLOPT_FOLLOWLOCATION, 1L);
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data); //处理的函数
        curl_easy_setopt( curl, CURLOPT_WRITEDATA, &cc);        //缓冲的内存
        res = curl_easy_perform(curl);// post
        if(res != CURLE_OK){
            if (CURLE_OPERATION_TIMEDOUT == res) //连接失败 超时
            {
                CCMessageBox("请重新尝试请求!", "网络连接超时");
                CCLog("网络超时:错误信息:%s\n",curl_easy_strerror(res));
                return 0;
            }
            CCMessageBox("请重新尝试请求!", "网络连接超时");
            CCLog("raw_send_recv : 启动 CURL 失败,错误信息:%s\n",curl_easy_strerror(res));
            return 0;
        }
        CCLog("~Send Data Done~~");
//清理 curl 结构,释放资源等
curl_easy_cleanup(curl);
        
} else  {
CCLog("raw_send_recv : 初始化 CURL 失败 \n");
        return 0; 
}
    return true;
}


int allLength;//总流长度
std::vector allData;//总数据

//服务器有数据返回的时候就会调用这个函数
size_t HHttp::write_data(uint8_t *dataPtr, size_t size, size_t nmemb, void *stream) {
    
    int  len  = size * nmemb;
    
    if(len!=1440){
        CCLog("收到服务器数据,返回的数据长度 : %i",allLength);
        
    }else{
        allLength+=len;
        allData.push_back(dataPtr);
    }
    size_t sizes = size * nmemb;
    return sizes;
}

你这样写对吗?
一般这么写
    // 初始化libcurl  
    CURLcode return_code;  
    return_code = curl_global_init(CURL_GLOBAL_WIN32);  
    if (CURLE_OK != return_code)  
        return 0;  
    CURL *curl_handle;  
    CURLcode res;  
    curl_handle = curl_easy_init();  
    curl_easy_setopt(curl_handle, CURLOPT_URL, url);  
   ....
你虽有
CURL *curl;
但没有
curl = curl_easy_init();
那 if (curl) 分支能进去吗?

你这样写对吗?
一般这么写
    // 初始化libcurl  
    CURLcode return_code;  
    return_code = curl_global_init(CURL_GLOBAL_WIN32);  
    if (CURLE_OK != return_code)  
        return 0;  
    CURL *curl_handle;  
    CURLcode res;  
    curl_handle = curl_easy_init();  
    curl_easy_setopt(curl_handle, CURLOPT_URL, url);  
   ....
你虽有
CURL *curl;
但没有
curl = curl_easy_init();
那 if (curl) 分支能进去吗?

代码确实运行了哈 连接成功了哈..... 我应该怎么办

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿