今天遇到几个PUT上传的点,但是都没利用起来。一怒之下,在自己本地试了一下。步骤如下:

一、环境:

首先,根据 配置Apache服务器支持向目录PUT文件 更新一下httpd.conf文件,重启所有服务。

二、HTTP - PUT

PUT的前提,是了解HTTP协议。下面给出HTTP - PUT的一个模板:

  1. PUT /test.txt HTTP/1.1
  2. Accept: */*
  3. Accept-Language: en-US
  4. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
  5. Host: test.com:8080
  6.  
  7. hello world

要注意如下几个点:

① PUT方法是HTTP 1.1协议中才出现的。

② HTTP协议对空格敏感,每行数据的结尾不能出现空格

③ HTTP头部和数据中间要空一行,即HTTP头部是以\r\n\r\n结尾的。

④ 端口号直接跟在HOST后面

三、第一次PUT

好了,现在可以PUT了。用Linux下的nc命令来进行连接。

  1. nc -v www.baidu.com 80
  1. root@bb:/etc# nc -v 192.168.163.1
  2. nc: 192.168.163.1 (192.168.163.1) [http-alt] open  
    /*在得到如上输出之后,再将PUT包的内容贴到命令行中,回车*/  
  3. PUT /test.txt HTTP/1.1
  4. Content-Length:
  5. Accept-Language: en-US
  6. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
  7. Host: 192.168.163.1:
  8.  
  9. hello world
    /*发送的PUT包到此为止,以下为收到的数据包*/
  10. HTTP/1.1 Internal Server Error
  11. Date: Wed, Apr :: GMT
  12. Server: Apache/2.2. (Win64) PHP/5.3. DAV/
  13. Content-Length:
  14. Connection: close
  15. Content-Type: text/html; charset=iso--
  16.  
  17. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  18. <html><head>
  19. <title> Internal Server Error</title>
  20. </head><body>
  21. <h1>Internal Server Error</h1>
  22. <p>The server encountered an internal error or misconfiguration and was unable to complete your request.</p>
  23. <p>Please contact the server administrator, admin@localhost and inform them of the time the error occurred,and anything you might have done that may have caused the error.</p>
  24. <p>More information about this error may be available in the server error log.</p>
  25. </body></html>

好像不对啊,500是服务器内部错误啊。好吧好吧,我们去看看主机的Apache日志。

四、再次配环境

主机用的是WAMP,日志在/wamp/logs/apache_error.log。找到对应的那一条:

通过浏览器搜索,又找到一篇日志。Linux(CentOS) 服务端搭建与配置,原来用HTTP - PUT还要添加一个什么锁。

所以解决方法是:在Apache配置文件中,也就是httpd.conf,增加一行,设定webDAV锁位置。再次重启所有服务。
  1. DavLockDB DavLock #目录没有就创建(DavLock 为文件名,应该有的目录结构是\wamp\bin\apache\Apache2.2.21\DavLock)
五、终于成功PUT
  1. root@bb:/etc# nc -v 192.168.163.1
  2. nc: 192.168.163.1 (192.168.163.1) [http-alt] open
  3. PUT /test.txt HTTP/1.1
  4. Content-Length:
  5. Accept-Language: en-US
  6. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)
  7. Host: 192.168.163.1:
  8.  
  9. hello world
  10. HTTP/1.1 Created
  11. Date: Wed, Apr :: GMT
  12. Server: Apache/2.2. (Win64) PHP/5.3. DAV/
  13. Location: http://192.168.163.1:8080/test.txt
  14. Content-Length:
  15. Content-Type: text/html; charset=ISO--
  16.  
  17. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  18. <html><head>
  19. <title> Created</title>
  20. </head><body>
  21. <h1>Created</h1>
  22. <p>Resource /test.txt has been created.</p>
  23. </body></html>

0。0 差不多这样,之后有更多关于PUT的经验,再分享

HTTP - PUT 上传文件/Shell的更多相关文章

  1. HTTP - PUT 上传文件/Shell (二)

    上一篇文章 HTTP - PUT 上传文件/Shell 讲到自己搭了一个环境,去测试HTTP - PUT上传Shell.最近又遇到几个PUT上传的例子,也成功上传了几次,来分享一下思密达. 0x00 ...

  2. linux 执行远程linux上的shell脚本或者命令以及scp 上传文件到ftp--免密码登陆

    场景:在linux A 上执行Linux B上的shell脚本和命令 步骤1.设置ssh免登陆 1.SSH无密码登录 # 本地服务器执行(A机器):生成密钥对 ssh-keygen -t dsa -P ...

  3. 批量上传文件到HDFS的Shell脚本

    在做Hadoop数据挖掘项目的时候,我们第一步是源数据的获取,即把相应的数据放置到HDFS中,以便Hadoop进行计算,手动将文件上传到HDFS中,未免太费时费力,所以我们可以采取像Flume一样的框 ...

  4. shell中利用ftp 上传文件夹功能

    我们知道ftp 只能用来上传或者下载文件,一次单个或者多个,怎么实现将文件夹的上传和下载呢? 可以利用先在remote ip上建立一个相同的文件夹目录,然后将文件放到各自的目录中去 1.循环遍历出要上 ...

  5. Shell脚本调用ftp上传文件

    Shell脚本调用ftp上传文件 1.脚本如下 ftp -n<<! open x.x.x.x ###x.x.x.x为ftp地址 user username password ###user ...

  6. C#远程执行Linux系统中Shell命令和SFTP上传文件

    一.工具:SSH.Net 网址:https://github.com/sshnet/SSH.NET 二.调用命令代码: Renci.SshNet.SshClient ssh = "); ss ...

  7. Go连接到Linux服务器进行操作-执行shell命令&&上传文件

    Go连接到Linux服务器进行操作 使用密码连接Linux服务器 package main import ( "fmt" "golang.org/x/crypto/ssh ...

  8. scp 上传文件到多个服务器节点

    参考:scp批量上传文件到多台机器上(升级版) 实测,代码可运行. 1.如果遇到syntax error near unexpected token问题,基本是由于windows环境下编写的shell ...

  9. c#连接SFTP上传文件

    名词解释(百度百科) sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能 ...

随机推荐

  1. 业界最有价值的 ASP.NET 博文汇总

    ASP.NET凭借它丰富的控件,强大的适应性及良好的封装性,成为业界开发的一门巨匠,它大大缩短了网站开发的时间,降低开发成本.并且可以运行在Web应用软件开发者的全部平台上.本电子书汇集了业界最有价值 ...

  2. MATLAB的基本元素

    MALTAB程序的基本数据单元是数组,MATLAB 的变量名必须以字母开头,后面可以跟字母,数字和下划线(_).只有前31个字符是有效的:如果超过了31 个字符,基余的字符将被忽略.如果声明两个变量, ...

  3. 为Debain &&Centos安装dig

    Debain&Ubuntu sudo apt-get install dnsutils Fdeoar&Centos yum install bind-utils

  4. JAXB - Unmarshalling

    A simple approach for unmarshalling an XML document consists of the creation of a JAXB context and t ...

  5. java poi出excel换行问题

    POI操作excel实现换行问题. package jp.co.misumi.mdm.batch.common.jobrunner; import java.io.FileInputStream; i ...

  6. 【高级JSE技术】线程池

    引言 线程池是java并发技术中常用的一种,通过缓存线程资源避免了频繁的创建销毁线程带来的额外开销,从而提高性能.JDK中有相应的Executor框架实现,而Spring中也带有线程池的功能.本文将从 ...

  7. C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据

    #region 帮助实例:SQL 批量插入数据 多种方法 /// <summary> /// SqlBulkCopy往数据库中批量插入数据 /// </summary> /// ...

  8. oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

  9. sorted函数

    我们需要对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本方法2.用built-in函数so ...

  10. .net远程连接oracle数据库不用安装oracle客户端

    asp.net远程连接oracle数据库不用安装oracle客户端的方法下面是asp.net连接远程Oracle数据库服务器步骤: 1.asp.net连接oracle服务器需要添加Sytem.Data ...