我必须使用PhP cURL发出PATCH请求.我找不到任何文档,所以我尝试了以下但是它没有用.
$data = "{'field_name': 'field_value'}";
$url = "http://webservice.url";
$headers = array('X-HTTP-Method-Override: PATCH');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
curl_close($curl);
Run Code Online (Sandbox Code Playgroud)
知道为什么这不起作用吗?我该如何解决?
编辑: 我正在连接到RESTful Web服务.它为成功请求返回HTTP/1.1 200.不成功的请求返回HTTP/1.1 403.我一直收到403.
我尝试将$ data更改为:
$data = "data={'field_name': 'field_value'}";
Run Code Online (Sandbox Code Playgroud)
它没有改变结果.
Edit2: 最终的工作代码.
$data = "{'field_name': 'field_value'}";
$url = "http://webservice.url";
$headers = array('Content-Type: application/json');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$response …Run Code Online (Sandbox Code Playgroud) 根据我的知识:
PUT - 用其整个表示更新对象(替换)PATCH - 仅使用给定字段更新对象(更新)我正在使用Spring来实现一个非常简单的HTTP服务器.当用户想要更新他的数据时,他需要将HTTP PATCH发送到某个端点(比方说:) api/user.他的请求体被映射到DTO via @RequestBody,如下所示:
class PatchUserRequest {
@Email
@Length(min = 5, max = 50)
var email: String? = null
@Length(max = 100)
var name: String? = null
...
}
Run Code Online (Sandbox Code Playgroud)
然后我使用这个类的对象来更新(补丁)用户对象:
fun patchWithRequest(userRequest: PatchUserRequest) {
if (!userRequest.email.isNullOrEmpty()) {
email = userRequest.email!!
}
if (!userRequest.name.isNullOrEmpty()) {
name = userRequest.name
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的疑问是:如果客户(例如网络应用程序)想清除房产怎么办?我会忽略这样的改变.
我怎么知道,如果用户想要清除一个属性(他故意将我命名为null)或者他只是不想改变它?在两种情况下,它在我的对象中都是null.
我可以在这里看到两个选项:
@Valid现在用.如何妥善处理此类案件,与REST和所有良好做法保持一致?
编辑:
可以说不PATCH应该在这样的例子中使用,我应该PUT用来更新我的用户.但是模型更改怎么样(例如添加新属性)?每次用户更改后,我都必须对我的API(或单独的用户端点)进行版本控制.例如,我将有api/v1/user终点,它接受PUT一个老请求主体和api/v2/user …
我在2个存储库中有我的项目.一个在SVN下,一个在Git下.每当我在SVN中更改某些内容时,我想对Git存储库执行相同的操作.
假设我对SVN存储库进行了更改,生成了修订版125.如何将这些相同的更改应用到我的Git存储库(假设我的Git存储库是最新的版本124).
谢谢.
我的git在同一个分支中有两个标签.它们之间至少有5-6个提交.如何在两个标签之间创建一个补丁,以便它可以应用于GitHub存储库?
假设我在Origin/master repo之前提交了7个提交.我想创建一个补丁,其中包含已更改的补丁中的特定文件,而不是所有文件.或等效项从已更改的修补程序中排除特定文件.我怎样才能做到这一点?
我有类似的东西
src/sim/simulate.cc
41d40
< #include "mem/mem-interface.h"
90,91d88
< dram_print_stats_common(curTick/500);
<
src/mem/physical.hh
52d51
< public:
55,56d53
< public:
<
58a56,57
> public:
>
61,62c60,61
< virtual bool recvTiming(PacketPtr pkt); //baoyg
<
---
Run Code Online (Sandbox Code Playgroud)
我相信这是使用源树中的diff命令创建的.我想要的是使用该输出创建补丁,并将相同的更改应用于我的源树.
是否有任何直接的方法来修改命令行中的二进制文件?假设我知道我的二进制包含1234abcd,我想将其更改为12FFabcd或FFFFabcd,甚至可能是FF34FFab0(你明白了):-)
如果不使用任何特殊用途工具(如http://stahlworks.com/dev/swiss-file-knife.html或类似工具),我将如何实现这一目标.
只使用标准的linux工具从命令行执行它会很棒.
或者甚至更好,而不是搜索十六进制字符串,我想直接替换在Offset 0x10000处写入FF,在Offset 0x100001处写入12,依此类推.
任何的想法?
提前致谢!
PS:我应该添加以下内容:
它应该是可编写脚本的,并直接从命令行运行.我正在寻找类似"二进制 - 包含在发行版 - 写入AB --at-offset 100000 --file thebinary.bin"之类的内容.我很确定使用"dd"是可能的,但是我无法绕过手册页.
有人拿了Moodle的一个版本(我不知道),在一个目录中应用了很多变化,然后发布它(树在这里).
如何确定最有可能编辑原始项目的哪个提交以形成此树?
这将允许我使用此补丁在适当的提交中形成分支.当然,它来自1.8或1.9分支,可能来自发布标记,但特定提交之间的差异对我没有多大帮助.
事后更新:knittl的回答让我尽可能接近.我首先添加了我的补丁仓库作为远程"外来"(没有共同提交,没关系),然后在带有几个格式选项的循环中做差异.第一个使用--shortstat格式:
for REV in $(git rev-list v1.9.0^..v1.9.5); do
git diff --shortstat "$REV" f7f7ad53c8839b8ea4e7 -- mod/assignment >> ~/rdiffs.txt;
echo "$REV" >> ~/rdiffs.txt;
done;
Run Code Online (Sandbox Code Playgroud)
第二个只计算了没有上下文的统一差异中的行变化:
for REV in $(git rev-list v1.9.0^..v1.9.5); do
git diff -U0 "$REV" f7f7ad53c8839b8ea4e7 -- mod/assignment | wc -l >> ~/rdiffs2.txt;
echo "$REV" >> ~/rdiffs2.txt;
done;
Run Code Online (Sandbox Code Playgroud)
有成千上万的提交要挖掘,但这个似乎是最接近的匹配.
我在网上做了一些搜索.我知道你可以在提交后使用format-patch,但我的情况有点不同.
我想创建一个补丁,类似于SVN中的"dpk",所以我可以发送它进行代码审查,但我还不想提交它.
我怎样才能用Git实现这个目标?
我想制作一个SVN类型的补丁文件,httpd.conf以便我可以轻松地将其应用到其他主机.
如果我做
cd /root
diff -Naur /etc/httpd/conf/httpd.conf_original /etc/httpd/conf/httpd.conf > httpd.patch
cp /etc/httpd/conf/httpd.conf_original /etc/httpd/conf/httpd.conf
patch < httpd.patch
Run Code Online (Sandbox Code Playgroud)
我明白了:
can't find file to patch at input line 3
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|--- /etc/httpd/conf/httpd.conf_original 2012-04-26 13:36:08.331068438 +0200
|+++ /etc/httpd/conf/httpd.conf 2012-04-26 14:27:36.857075085 +0200
--------------------------
File to patch:
Run Code Online (Sandbox Code Playgroud)
题
我究竟做错了什么?