如何在ApacheHTTP服务器中转发POST请求
有一个客户端是在Nodejs中实现的。我希望将post请求发送到ApacheHTTP服务器,然后将该请求转发到后端服务器(它位于其他地方)。 所以我实现了NodeJS客户端和Apache模块。这两者之间的请求和响应是正常的。现在我的问题是如何将这个请求从ApacheHTTP服务器转发到后端服务器 Nodejs client.js如何在ApacheHTTP服务器中转发POST请求,apache,apache2,apache2.4,apache2-module,Apache,Apache2,Apache2.4,Apache2 Module,有一个客户端是在Nodejs中实现的。我希望将post请求发送到ApacheHTTP服务器,然后将该请求转发到后端服务器(它位于其他地方)。 所以我实现了NodeJS客户端和Apache模块。这两者之间的请求和响应是正常的。现在我的问题是如何将这个请求从ApacheHTTP服务器转发到后端服务器 Nodejs client.js var request = require('request'); var userDetails={ username:"username", pas
var request = require('request');
var userDetails={
username:"username",
password:"abc123"
}
var optsSingup = {
url: "http://localhost:80/a",
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
form:{
username:userDetails.username,
password:userDetails.password,
}
};
request(optsSingup, function (err, res, body) {
console.log('error', err);
//console.log('status', res.statusCode);
console.log('body', body);
});
Apache模块(我一直在学习本教程示例mod\u example\u config.c)。在这里,我将共享模块的处理程序部分。其他部分与mod_example_config.c相同
typedef struct {
const char* key;
const char* value;
} keyValuePair;
static int example_handler(request_rec *r)
{
formData = readPost(r);
if (formData) {
int i;
for (i = 0; &formData[i]; i++) {
if (formData[i].key && formData[i].value) {
ap_rprintf(r, "%s = %s\n", formData[i].key, formData[i].value);
} else if (formData[i].key) {
ap_rprintf(r, "%s\n", formData[i].key);
} else if (formData[i].value) {
ap_rprintf(r, "= %s\n", formData[i].value);
} else {
break;
}
}
}
return OK;
}
keyValuePair* readPost(request_rec* r) {
apr_array_header_t *pairs = NULL;
apr_off_t len;
apr_size_t size;
int res;
int i = 0;
char *buffer;
keyValuePair* kvp;
res = ap_parse_form_data(r, NULL, &pairs, -1, HUGE_STRING_LEN);
if (res != OK || !pairs) return NULL;
kvp = apr_pcalloc(r->pool, sizeof(keyValuePair) * (pairs->nelts + 1));
while (pairs && !apr_is_empty_array(pairs)) {
ap_form_pair_t *pair = (ap_form_pair_t *) apr_array_pop(pairs);
apr_brigade_length(pair->value, 1, &len);
size = (apr_size_t) len;
buffer = apr_palloc(r->pool, size + 1);
apr_brigade_flatten(pair->value, buffer, &size);
buffer[len] = 0;
kvp[i].key = apr_pstrdup(r->pool, pair->name);
kvp[i].value = buffer;
i++;
}
return kvp;
}
实际上,这不是正确的方法。请查看此问题的答案您应该使用mod_代理模块,并将其设置为反向代理(网关)。Mod proxy将轻松地将请求转发到后端服务器。没有必要在这个问题上重新设计轮子。