标签: patch

如何使用cURL在PHP中创建PATCH请求?

我必须使用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)

php curl patch

52
推荐指数
1
解决办法
4万
查看次数

如何在基于Spring的强类型语言中正确地进行PATCH - 例子

根据我的知识:

  • 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.

我可以在这里看到两个选项:

  • 同意客户,如果他想删除一个属性,他应该给我一个空字符串(但是日期和其他非字符串类型呢?)
  • 停止使用DTO映射并使用一个简单的映射,这将让我检查字段是否为空或根本没有给出.那么请求身体验证呢?我@Valid现在用.

如何妥善处理此类案件,与REST和所有良好做法保持一致?

编辑:

可以说不PATCH应该在这样的例子中使用,我应该PUT用来更新我的用户.但是模型更改怎么样(例如添加新属性)?每次用户更改后,我都必须对我的API(或单独的用户端点)进行版本控制.例如,我将有api/v1/user终点,它接受PUT一个老请求主体和api/v2/user …

rest spring patch kotlin spring-boot

52
推荐指数
2
解决办法
7138
查看次数

如何将SVN diff应用于Git?

我在2个存储库中有我的项目.一个在SVN下,一个在Git下.每当我在SVN中更改某些内容时,我想对Git存储库执行相同的操作.

假设我对SVN存储库进行了更改,生成了修订版125.如何将这些相同的更改应用到我的Git存储库(假设我的Git存储库是最新的版本124).

谢谢.

svn git version-control patch

49
推荐指数
4
解决办法
2万
查看次数

如何在两个标签之间创建补丁并在它们之间进行多次提交?

我的git在同一个分支中有两个标签.它们之间至少有5-6个提交.如何在两个标签之间创建一个补丁,以便它可以应用于GitHub存储库?

git patch

44
推荐指数
2
解决办法
4万
查看次数

在git中创建一个包含特定文件的补丁

假设我在Origin/master repo之前提交了7个提交.我想创建一个补丁,其中包含已更改的补丁中的特定文件,而不是所有文件.或等效项从已更改的修补程序中排除特定文件.我怎样才能做到这一点?

git patch file

44
推荐指数
2
解决办法
2万
查看次数

使用diff的输出来创建补丁

我有类似的东西

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命令创建的.我想要的是使用该输出创建补丁,并将相同的更改应用于我的源树.

diff patch

40
推荐指数
2
解决办法
6万
查看次数

CLI:在地址处写入字节(来自命令行的hexedit/modify binary)

是否有任何直接的方法来修改命令行中的二进制文件?假设我知道我的二进制包含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"是可能的,但是我无法绕过手册页.

shell scripting hex patch edit

39
推荐指数
4
解决办法
3万
查看次数

Git:我怎样才能找到与目录最匹配的提交?

有人拿了Moodle的一个版本(我不知道),在一个目录中应用了很多变化,然后发布它(树在这里).

如何确定最有可能编辑原始项目的哪个提交以形成此树?

这将允许我使用此补丁在适当的提交中形成分支.当然,它来自1.81.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)

有成千上万的提交要挖掘,但这个似乎是最接近的匹配.

git diff patch commit

39
推荐指数
1
解决办法
2474
查看次数

如何在Git中创建没有提交的补丁

我在网上做了一些搜索.我知道你可以在提交后使用format-patch,但我的情况有点不同.

我想创建一个补丁,类似于SVN中的"dpk",所以我可以发送它进行代码审查,但我还不想提交它.

我怎样才能用Git实现这个目标?

git patch

39
推荐指数
4
解决办法
3万
查看次数

如何制作和应用SVN补丁?

我想制作一个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)

我究竟做错了什么?

linux diff patch

38
推荐指数
3
解决办法
7万
查看次数

标签 统计

patch ×10

git ×5

diff ×3

commit ×1

curl ×1

edit ×1

file ×1

hex ×1

kotlin ×1

linux ×1

php ×1

rest ×1

scripting ×1

shell ×1

spring ×1

spring-boot ×1

svn ×1

version-control ×1