乐云主机笔记

  • 首页
  • 主机优惠
  • 学习记录
  • 新手教程
  • 自用主机
  • 资源下载
  • 网赚项目
  • 其他
  • pingtest

  1. 首页
  2. 学习记录
  3. 正文

解决cfp添加/修改解析记录报错问题(ZE3kr大佬作品)

2020年6月11日 1235点热度 0人点赞 0条评论

使用ZE3kr-Cloudflare(CFP)面板添加解析代码报错,如下

Client error: `POST https://api.cloudflare.com/client/v4/zones/cab156fc85326d9d87e887dc4eb6b75b/dns_records` resulted in a `400 Bad Request` response: { "result": null, "success": false, "errors": [ { "code": 9207, "message": "Failed to parse reques (truncated...)

 

其实和白嫖不白嫖的关系不大。白嫖一样能用,不过CF的API解析参数严格了一些。

问题出现在:

添加DNS记录:

actions/add_record.php 第20行往后

$options = [
		'type' => $_POST['type'],
		'name' => $_POST['name'],
		'content' => $_POST['content'],
		'proxied' => $_POST['proxied'],
		'ttl' => intval($_POST['ttl']),
		'data' => $dns_data, 
	];

	if ($_POST['type'] == 'MX') {
		$options['priority'] = intval($_POST['priority']);
	}
	try {
		$dns = $adapter->post('zones/' . $_GET['zoneid'] . '/dns_records', $options);

 

上面的data在非CAA、SRV记录中是空的(见record_data.php中定义)。但是CF的API无法解析这个空数组,所以就无法添加DNS记录。

修改DNS记录:

actions/edit_record.php 第31行记录

巴拉巴拉巴拉吧(同样的问题,不再赘述)

解决:

部分代码修改法

传入之前删除这个空数组。

$options = [
	'type' => $_POST['type'],
	'name' => $_POST['name'],
	'content' => $_POST['content'],
	'proxied' => $_POST['proxied'],
	'ttl' => intval($_POST['ttl']),
	'data' => $dns_data, 
];

if ($_POST['type'] == 'MX') {
	$options['priority'] = intval($_POST['priority']);
}
try {
	if(empty($options['data']))unset($options['data']);##就是这一行啦。
	$dns = $adapter->post('zones/' . $_GET['zoneid'] . '/dns_records', $options);

 

直接文件替换法

当然你也可以直接下载

https://github.com/yumusb/Fix-ZE3kr-Cloudflare/blob/master/add_record.php 替换掉 actions/add_record.php

https://github.com/yumusb/Fix-ZE3kr-Cloudflare/blob/master/edit_record.php 替换掉 actions/edit_record.php

全部代码替换法

或修改actions/edit_record.php为以下代码:

<?php
/*
 * Edit a record.
 */

if (!isset($adapter)) {exit;}
?>
<strong><?php echo '<h1 class="h5"><a href="?action=zone&amp;domain=' . $_GET['domain'] . '&amp;zoneid=' . $_GET['zoneid'] . '">&lt;- ' . _('Back') . '</a></h1>'; ?></strong><hr>
<?php
$dns = new \Cloudflare\API\Endpoints\DNS($adapter);
$dns_details = $dns->getRecordDetails($_GET['zoneid'], $_GET['recordid']);
if (isset($_POST['submit'])) {
	if (isset($_POST['proxied']) && $_POST['proxied'] == 'true') {
		$_POST['proxied'] = true;
	} else {
		$_POST['proxied'] = false;
	}
	$_POST['ttl'] = intval($_POST['ttl']);
	$_POST['type'] = $dns_details->type;
	if (isset($_POST['priority']) && $_POST['type'] == 'MX') {
		$_POST['priority'] = intval($_POST['priority']);
	} else {
		$_POST['priority'] = 10;
	}
	if (!isset($_POST['content'])) {
		$_POST['content'] = "";
	}

	include "record_data.php";

	try {
		$options = ['type' => $dns_details->type, 'name' => $_POST['name'], 'content' => $_POST['content'], 'ttl' => intval($_POST['ttl']), 'priority' => $_POST['priority'], 'proxied' => $_POST['proxied'], 'data' => $dns_data];
		if(empty($options['data']))unset($options['data']);
		if ($dns->updateRecordDetails($_GET['zoneid'], $_GET['recordid'], $options)) {
			exit('<p class="alert alert-success" role="alert">' . _('Success') . '</p>');
		} else {
			echo '<p class="alert alert-danger" role="alert">' . _('Failed') . '</p>';
		}
	} catch (Exception $e) {
		echo '<p class="alert alert-danger" role="alert">' . _('Failed') . '</p>';
		echo '<div class="alert alert-warning" role="alert">' . $e->getMessage() . '</div>';
	}
}
if (isset($msg)) {echo $msg;}
?>
<form method="POST" action="">
	<fieldset>
		<legend><?php echo _('Edit DNS Record'); ?></legend>
		<div class="form-group">
			<label for="name"><?php echo _('Record Name (e.g. “@”, “www”, etc.)'); ?></label>
			<input type="text" name="name" id="name" value="<?php echo htmlspecialchars($dns_details->name); ?>" class="form-control">
		</div>
		<div class="form-group">
			<label for="type"><?php echo _('Record Type'); ?></label>
			<select name="type" id="type" disabled="disabled" class="form-control">
				<option value="<?php echo $dns_details->type; ?>"><?php echo $dns_details->type; ?></option>
			</select>
		</div>

		<?php if ($dns_details->type == 'CAA') {?>
			<div class="form-group">
				<label for="data_tag"><?php echo _('Tag'); ?></label>
				<select name="data_tag" id="data_tag" class="form-control" data-selected="<?php echo $dns_details->data->tag ?>">
					<option value="issue"><?php echo _('Only allow specific hostnames') ?></option>
					<option value="issuewild"><?php echo _('Only allow wildcards') ?></option>
					<option value="iodef"><?php echo _('Send violation reports to URL (http:, https:, or mailto:)') ?></option>
				</select>
			</div>
			<div class="form-group">
				<label for="data_value"><?php echo _('Value'); ?></label>
				<input type="text" name="data_value" id="data_value" value="<?php echo htmlspecialchars($dns_details->data->value); ?>" class="form-control">
			</div>
			<input type="hidden" name="data_flags" value="0">
		<?php } elseif ($dns_details->type == 'SRV') {?>
			<div class="form-group">
				<label for="srv_service"><?php echo _('Service'); ?></label>
				<input type="text" name="srv_service" id="srv_service" value="<?php echo $dns_details->data->service ?>" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_proto"><?php echo _('Proto'); ?></label>
				<select name="srv_proto" id="srv_proto" class="form-control" data-selected="<?php echo $dns_details->data->proto ?>">
					<option value="_tcp">TCP</option>
					<option value="_udp">UDP</option>
					<option value="_tls">TLS</option>
				</select>
			</div>
			<div class="form-group">
				<label for="srv_name"><?php echo _('Name'); ?></label>
				<input type="text" name="srv_name" id="srv_name" value="<?php echo $dns_details->data->name ?>" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_priority"><?php echo _('Priority'); ?></label>
				<input type="text" name="srv_priority" id="srv_priority" value="<?php echo $dns_details->data->priority ?>" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_weight"><?php echo _('Weight'); ?></label>
				<input type="text" name="srv_weight" id="srv_weight" value="<?php echo $dns_details->data->weight ?>" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_port"><?php echo _('Port'); ?></label>
				<input type="text" name="srv_port" id="srv_port" value="<?php echo $dns_details->data->port ?>" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_target"><?php echo _('Target'); ?></label>
				<input type="text" name="srv_target" id="srv_target" value="<?php echo $dns_details->data->target ?>" class="form-control">
			</div>
		<?php } else {?>
		<div class="form-group">
			<label for="doc-ta-1"><?php echo _('Record Content'); ?></label>
			<textarea name="content" rows="5" id="doc-ta-1" class="form-control"><?php echo htmlspecialchars($dns_details->content); ?></textarea>
		</div>
			<?php if ($dns_details->type == 'MX' || $dns_details->type == 'SRV') {?>
				<div class="form-group">
					<label for="priority"><?php echo _('Priority'); ?></label>
					<input type="number" name="priority" id="priority" step="1" min="1" value="<?php echo $dns_details->priority; ?>" class="form-control">
				</div>
			<?php }?>
		<?php }?>

		<div class="form-group">
			<label for="ttl">TTL</label>
			<select name="ttl" id="ttl" class="form-control">
				<?php
foreach ($ttl_translate as $_ttl => $_ttl_name) {
	echo '<option value="' . $_ttl . '">' . $_ttl_name . '</option>';
}
?>
			</select>
		</div>
		<?php if ($dns_details->proxiable) {?>
		<div class="form-group">
			<label for="proxied">CDN</label>
			<select name="proxied" id="proxied" class="form-control">
				<option value="true" <?php if ($dns_details->proxied) {echo 'selected="selected"';}?>><?php echo _('On'); ?></option>
				<option value="false" <?php if (!$dns_details->proxied) {echo 'selected="selected"';}?>><?php echo _('Off'); ?></option>
			</select>
		</div>
		<?php }?>

		<button type="submit" name="submit" class="btn btn-primary"><?php echo _('Submit'); ?></button>
	</fieldset>
</form>

修改 actions/add_record.php为以下代码

<?php
/*
 * Add record for specific domain.
 */

if (!isset($adapter)) {exit;}

if (isset($_POST['submit'])) {
	if ($_POST['proxied'] == 'false') {
		$_POST['proxied'] = false;
	} else {
		$_POST['proxied'] = true;
	}
	if ($_POST['type'] != 'A' && $_POST['type'] != 'AAAA' && $_POST['type'] != 'CNAME') {
		$_POST['proxied'] = false;
	}

	include "record_data.php";

	$options = [
		'type' => $_POST['type'],
		'name' => $_POST['name'],
		'content' => $_POST['content'],
		'proxied' => $_POST['proxied'],
		'ttl' => intval($_POST['ttl']),
		'data' => $dns_data,
	];

	if ($_POST['type'] == 'MX') {
		$options['priority'] = intval($_POST['priority']);
	}
	try {
		if(empty($options['data']))unset($options['data']);
		$dns = $adapter->post('zones/' . $_GET['zoneid'] . '/dns_records', $options);
		$dns = json_decode($dns->getBody());
		if (isset($dns->result->id)) {
			exit('<p class="alert alert-success" role="alert">' . _('Success') . ', <a href="?action=add_record&amp;zoneid=' . $_GET['zoneid'] . '&domain=' . $_GET['domain'] . '">' . _('Add New Record') . '</a>, ' . _('Or') . '<a href="?action=zone&amp;domain=' . $_GET['domain'] . '&amp;zoneid=' . $_GET['zoneid'] . '">' . _('Go to console') . '</a></p>');
		} else {
			exit('<p class="alert alert-danger" role="alert">' . _('Failed') . ', <a href="?action=add_record&amp;zoneid=' . $_GET['zoneid'] . '&domain=' . $_GET['domain'] . '">' . _('Add New Record') . '</a>, ' . _('Or') . '<a href="?action=zone&amp;domain=' . $_GET['domain'] . '&amp;zoneid=' . $_GET['zoneid'] . '">' . _('Go to console') . '</a></p>');
		}
	} catch (Exception $e) {
		echo '<p class="alert alert-danger" role="alert">' . _('Failed') . '</p>';
		echo '<div class="alert alert-warning" role="alert">' . $e->getMessage() . '</div>';
	}
}
?>
<strong><?php echo '<h1 class="h5"><a href="?action=zone&amp;domain=' . $_GET['domain'] . '&amp;zoneid=' . $_GET['zoneid'] . '">&lt;- ' . _('Back') . '</a></h1>'; ?></strong><hr>
<form method="POST" action="">
	<fieldset>
		<legend><?php echo _('Add DNS Record'); ?></legend>
		<div class="form-group">
			<label for="name"><?php echo _('Record Name (e.g. “@”, “www”, etc.)'); ?></label>
			<input type="text" name="name" id="name" class="form-control">
		</div>
		<div class="form-group">
			<label for="type"><?php echo _('Record Type'); ?></label>
			<select name="type" id="type" class="form-control">
				<option value="A">A</option>
				<option value="AAAA">AAAA</option>
				<option value="CNAME">CNAME</option>
				<option value="MX">MX</option>
				<option value="SPF">SPF</option>
				<option value="TXT">TXT</option>
				<option value="NS">NS</option>
				<option value="PTR">PTR</option>
				<option value="CAA">CAA</option>
				<option value="SRV">SRV</option>
			</select>
		</div>

		<div class="form-group" id="dns-content">
			<label for="doc-ta-1"><?php echo _('Record Content'); ?></label>
			<textarea name="content" rows="5" id="doc-ta-1" class="form-control"></textarea>
		</div>

		<div class="form-group" id="dns-mx-priority">
			<label for="priority"><?php echo _('Priority'); ?></label>
			<input type="number" name="priority" id="priority" step="1" min="1" value="1" class="form-control">
		</div>

		<div id="dns-data-caa">
			<div class="form-group">
				<label for="data_tag"><?php echo _('Tag'); ?></label>
				<select name="data_tag" id="data_tag" class="form-control">
					<option value="issue" selected="selected"><?php echo _('Only allow specific hostnames') ?></option>
					<option value="issuewild"><?php echo _('Only allow wildcards') ?></option>
					<option value="iodef"><?php echo _('Send violation reports to URL (http:, https:, or mailto:)') ?></option>
				</select>
			</div>
			<div class="form-group">
				<label for="data_value"><?php echo _('Value'); ?></label>
				<input type="text" name="data_value" id="data_value" class="form-control">
			</div>
			<input type="hidden" name="data_flags" value="0">
		</div>

		<div id="dns-data-srv">
			<div class="form-group">
				<label for="srv_service"><?php echo _('Service'); ?></label>
				<input type="text" name="srv_service" id="srv_service" value="_sip" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_proto"><?php echo _('Proto'); ?></label>
				<select name="srv_proto" id="srv_proto" class="form-control">
					<option value="_tcp" selected="selected">TCP</option>
					<option value="_udp">UDP</option>
					<option value="_tls">TLS</option>
				</select>
			</div>
			<div class="form-group">
				<label for="srv_priority"><?php echo _('Priority'); ?></label>
				<input type="text" name="srv_priority" id="srv_priority" value="1" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_weight"><?php echo _('Weight'); ?></label>
				<input type="text" name="srv_weight" id="srv_weight" value="1" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_port"><?php echo _('Port'); ?></label>
				<input type="text" name="srv_port" id="srv_port" value="1" class="form-control">
			</div>
			<div class="form-group">
				<label for="srv_target"><?php echo _('Target'); ?></label>
				<input type="text" name="srv_target" id="srv_target" class="form-control">
			</div>
		</div>

		<div class="form-group">
			<label for="ttl">TTL</label>
			<select name="ttl" id="ttl" class="form-control">
				<?php
foreach ($ttl_translate as $_ttl => $_ttl_name) {
	echo '<option value="' . $_ttl . '">' . $_ttl_name . '</option>';
}
?>
			</select>
		</div>
		<div class="form-group">
			<label for="proxied">CDN</label>
			<select name="proxied" id="proxied" class="form-control">
				<option value="true"><?php echo _('On'); ?></option>
				<option value="false"><?php echo _('Off'); ?></option>
			</select>
		</div>
		<p><button type="submit" name="submit" class="btn btn-primary"><?php echo _('Submit'); ?></button></p>
	</fieldset>
	<script>

	</script>
</form>

保存即可。

最后

如果有帮助到你,请不要吝啬。 http://33.al/donate

标签: 暂无
最后更新:2020年6月11日

letvps

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

分类
  • 主机优惠
  • 其他
  • 域名优惠
  • 学习记录
  • 新手教程
  • 网赚项目
  • 脚本源码
  • 自用主机
  • 资源下载
书签
  • AdvinServers.com
  • 猫云云计算

COPYRIGHT © 2021 Letcloud.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15031609号-3